Introduction
Golang给开发者提供了一个很成熟的单元测试框架,我们可以直接使用go test
来执行测试。但是在单元测试中还有需要细节要考虑的,比如哪些文件会运行?测试的范围是什么?这些测试是串行运行还是并行运行等,这些都是我们实际应用时要考虑的问题。
测试范围及文件类型
我们在运行go test
命令后,哪些测试文件会被执行,他的范围又是什么?
首先在某个文件夹下执行了go test
命令后,这个命令会在当前的package中寻找符合*_test.go
的文件,并在这些文件中找到TestXxx(*testing.T){}
、BenchmarkXxx(b *testing.B) {}
、ExampleXxx() {}
这些函数执行测试用例。
如果想要执行当前package下所有的测试用例,可以使用命令go test ./...
,这样就会搜索当前目录及子目录下所有符合要求的测试文件。
串行还是并行
在测试过程中测试用例的执行串行还是并行很重要吗?当然,这直接影响着测试的结果。试想一下如果测试的时候需要连接到测试的本地数据库,A用例需要创建一条记录,而B用例则需要删除一条记录,如果是并行的话就会有意想不到的效果。这会导致每次测试的结果可能都不同,无法有效地测试代码的正确性。
默认情况下,在不同的package之间的测试是并行的,在package内部是串行的。但是如果在package内部需要串行执行的话,就需要显式执行t.Parallel()
或者在运行命令是带上参数go test -parallel 1 -p 1
。第一个参数-parallel
设定的是并行测试函数的数目,对应的是package内部的测试,默认值是GOMAXPROCS
;第二个参数-p
设定的是并行测试的test binary数目,对应的是package之间的测试,默认值是CPU的核数。
小结
这里简单分享一些有关Go单元测试的小知识,后续遇到了相关的问题会继续在这里分享。
Reference
- [Golang测试](