我在Go中看到了几种不同的测试包命名策略,并想知道每种策略的优缺点以及应该使用哪种优缺点。
策略一:
文件名:github.com/user/myfunc.go
package myfunc
测试文件名称:github.com/user/myfunc_test.go
有关示例,请参见bzip2。
策略2:
package myfunc_test import ( "github.com/user/myfunc" )
有关示例,请参见wire。
策略3:
package myfunc_test import ( . "myfunc" )
有关示例,请参见字符串。
Go标准库似乎混合使用了策略1和2。我应该使用这三种策略中的哪一种?将package *_test测试包附加到我的身上很痛苦,因为这意味着我无法测试包的私有方法,但是也许有一个我不知道的隐藏优势?
package *_test
您列出的三种策略之间的根本区别是测试代码是否与被测试代码位于同一程序包中。在使用的决定package myfunc或package myfunc_test在测试文件取决于你是否要执行白盒或黑箱测试。
package myfunc_test
在项目中同时使用这两种方法都没有错。例如,您可以拥有myfunc_whitebox_test.go和myfunx_blackbox_test.go。
myfunc_whitebox_test.go
myfunx_blackbox_test.go
myfunc_test.go
myfunc.go
myfunc