go test文件应该放在哪里?
go test的命名约束
请大家参见如下的博客:https://blog.csdn.net/code_segment/article/details/77507491
文件名必须是
_test.go
结尾的(文件名必须是*_test.go
的类型,*代表要测试的文件名),这样在执行go test
的时候才会执行到相应的代码你必须import
testing
这个包所有的测试用例函数必须是
Test
开头(函数名必须以Test开头如:TestXxx或Test_xxx)测试用例会按照源代码中写的顺序依次执行
测试函数
TestXxx()
的参数是testing.T
,我们可以使用该类型来记录错误或者是测试状态测试格式:
func TestXxx (t *testing.T)
,Xxx
部分可以为任意的字母数字的组合,但是首字母不能是小写字母[a-z],例如Testintdiv
是错误的函数名。函数中通过调用
testing.T
的Error
,Errorf
,FailNow
,Fatal
,FatalIf
方法,说明测试不通过,调用Log
方法用来记录测试的信息。
go test文件放置何处
对比如下的2种情况:
1.go test文件与源文件放置在相同的目录
在相同的目录下,不能声明多个package,否则会报如下的错误:
D:\workspace\go\src\tryme\add>go test
can't load package: package tryme/add: found packages add (add.go) and me (add_test.go) in D:\workspace\go\src\tryme\add
在相同的目录下,也就是在相同的package下,接口是可见的,不需要在test文件中引入待测试接口的package,否则会提示出现import cycle:
D:\workspace\go\src\tryme\add>go test
# tryme/add
import cycle not allowed in test
因此,主要直接使用接口就可以。
2.go test文件与源文件没有放置到不同的目录下
可将单元测试文件与源文件进行分离,方便集中进行管理。
此时需要注意的事项包括:
需要import导入源文件所在的包,使用接口时,也需要使用“package_name.API”的方式引用。
go_test文件使用任意的包名即可,但是要保证是完全一致的,因为一个目录下只能有一个包名。
有疑问加站长微信联系(非本文作者)
补充一条。 go test文件中,还可以增加benchmark用例。 差别在于:benchmark用例必须以Benchmark开头,且在运行时一定要加-bench参数,例如: go test -bench=. go test只会运行Test开头的用例。 TestMain(m *testing.M) 是一个总管初始化入口,可以将数据库,网络等一些初始化操作放置到这里。 Benchmark测试用例需要保证其执行能在一个稳态上,否则可能b.N为了适应变化,不断调整N值,导致无法运行完成。