如何从“ go test”测试“ main()”例程?

joh*_*234 3 testing go

我想通过编写一些侧重于测试整个二进制文件的抗回归测试来锁定golang程序的面向用户的命令行API 。“整体二进制”测试的意思是,go-test应该:

  1. 能够将STDIN喂入我的二进制文件
  2. 能够检查我的二进制文件产生正确的STDOUT
  3. 能够确保二进制错误处理正确

然而,这不是明显对我有什么做的是,在最佳实践?如果有一个很好的go测试示例,您能指出我吗?

PS过去我一直在使用自动工具。我正在寻找类似于AT_CHECK的东西,例如:

AT_CHECK([echo "XXX" | my_binary -e arg1 -f arg2], [1], [],
  [-f and -e can't be used together])
Run Code Online (Sandbox Code Playgroud)

Sła*_*osz 6

只需main()一行即可:

import "myapp"

func main() {
    myapp.Start()
}
Run Code Online (Sandbox Code Playgroud)

myapp正确测试包装。

编辑:例如,流行的etcd conf服务器使用此技术:https : //github.com/coreos/etcd/blob/master/main.go


小智 5

我觉得你太努力了:我只是尝试了以下

func TestMainProgram(t *testing.T) {
    os.Args = []string{"sherlock",
        "--debug", 
        "--add", "zero",
        "--ruleset", "../scripts/ceph-log-filters/ceph.rules",
        "../scripts/ceph-log-filters/ceph.log"}
    main()
}
Run Code Online (Sandbox Code Playgroud)

它工作正常。我可以很容易地从它做一个普通的表格测试或 goConvey BDD ......