我在 Go 中看到了几种不同的测试包命名策略,想知道每种策略的优缺点以及我应该使用哪一种。
策略一:
文件名:github.com/user/myfunc.go
package myfunc
测试文件名:github.com/user/myfunc_test.go
有关示例,请参见bzip2。
策略二:
package myfunc_test import ( "github.com/user/myfunc" )
策略三:
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