在Go包中放置测试的共享代码的位置?

时间:2016-12-03 15:09:22

标签: unit-testing go

我有一个包含多个文件的Go包。从Go标准开始,我正在为包中的每个源文件创建一个关联的测试文件。

在我的情况下,不同的测试使用相同的测试帮助功能。我不希望这些函数包含在包源文件中,因为它仅用于测试目的。我还想避免在每个测试文件中复制此代码。

我应该在所有测试源文件之间共享此代码,而不是包的一部分?

1 个答案:

答案 0 :(得分:2)

您只需将其放入任何测试文件即可。使用相同包子句的测试文件属于同一个测试包,可以在没有任何import语句的情况下引用彼此导出的未导出的标识符。

另请注意,您无需为每个_test.go文件创建单独的.go文件;并且你可以拥有一个xx_test.go文件而不需要匹配"包中的xx.go文件。

例如,如果您正在编写包a,请使用以下文件:

a/
    a.go
    b.go
    a_test.go
    b_test.go

对于黑盒测试,您可以使用package a_testa_test.go中的b_test.go包条款。文件func util()中有a_test.go,您也可以在b_test.go中使用它。

如果你正在编写白盒测试,那么你在测试文件中使用package a,再次,你可以从{{1}引用a_test.go中声明的任何标识符没有任何导入的(反之亦然)。

请注意,如果b_test.goa_test.go中的包条款不匹配(例如b_test.go使用a_test.gopackage a使用b_test.go ),那么它们将属于不同的测试包,然后你就不能使用彼此声明的标识符。