最近在用go语言编程。相对于c/c++等其他编程。
go的测试代码一般都是同在在对应源码所在文件路径。
如果是一个大的工程。假设工程名为work ,所在的路径在$GOPATH/work下
如:
main.go
cli --|
command_cli.go
cmd-|
web_handler.go
等等
其对应的go test文件是这样的:
main.go
main_test.go
cli--|
command_cli.go
command_cli_test.go
cmd--|
web_handler.go
web_handler_test.go
下面看如何做单元测试。
1、go test
在所在工程文件下 go test则是测试当前文件夹下所有测试用例。
首先进入$GOPATH/work下 输入go test就是在当前 main_test.go
2、go test -v
显示测试通过和不通过的所有测试结果。
3、go test command_cli_test.go测试某个测试文件
在这个时候可能存在因为没有main函数。所以需要输入参数。
也就是会提示说command-in-argument的情况
因为1、并不是所有的测试是单元测试。2、当前功能函数不依赖于"ENV",只是需要输入参数
解决办法
1、设置全局环境变量:
var envSetting = os.Getenv("TEST_ENV")
然后在init输入参数
func init(){
flags.Parse()
myEnv = *envFlag
//...
}
2、打桩main .如
var flagvar ini
func init(){
flag.IntVar(&flagvar, "flagname", 1234, "help for flagname")
}
func main(){
flag.Parse()
submain(flag.Args)
}
func submain(args [] string){
...
}
测试main_test.go时
func TestSomething(t *testing.T){
flagvar = 23
args := [] string{"a","b","c"}
submain(args)
...
}