策略1:
文件名:github.com/user/myfunc.go
package myfunc
测试文件名:github.com/user/myfunc_test.go
package myfunc
参见bzip2为例。
策略2:
文件名:github.com/user/myfunc.go
package myfunc
测试文件名:github.com/user/myfunc_test.go
package myfunc_test import ( "github.com/user/myfunc" )
参见wire为例。
策略3:
文件名:github.com/user/myfunc.go
package myfunc
测试文件名:github.com/user/myfunc_test.go
package myfunc_test import ( . "myfunc" )
参见strings为例。
Go标准库似乎使用策略1和2的混合。我应该使用哪三个?这是一个疼痛附加包* _test到我的测试包,因为它意味着我不能测试我的包私有方法,但也许有一个隐藏的优势,我不知道?
在项目中使用这两种方法没有什么不妥。例如,你可以有myfunc_whiteBox_test.go和myfunx_blackBox_test.go。
测试代码包比较
>黑盒测试:使用包myfunc_test,这将确保你只使用exported identifiers。
>白盒测试:使用包myfunc,以便您可以访问非导出的标识符。适用于需要访问非导出变量,函数和方法的单元测试。
问题中列出的策略的比较
>策略1:文件myfunc_test.go使用package myfunc – 在这种情况下,myfunc_test.go中的测试代码将与myfunc.go中测试的代码在同一个包中,在本示例中为myfunc。
>策略2:文件myfunc_test.go使用包myfunc_test – 在这种情况下,myfunc_test.go中的测试代码将被编译为一个单独的包,然后链接和运行与主测试二进制。 [源:test.go源代码中的58-59行]>策略3:文件myfunc_test.go使用包myfunc_test,但使用点符号导入myfunc – 这是策略2的变体,但使用点符号导入myfunc。