一尘不染

将共享的测试代码放在Go包中的哪里?

go

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

就我而言,不同的测试使用相同的测试帮助功能。我不希望这些功能出现在软件包源文件中,因为它仅用于测试目的。我也想避免在每个测试文件中复制此代码。

我应该把这些代码放在所有测试源文件之间共享而不是包的一部分中吗?


阅读 207

收藏
2020-07-02

共1个答案

一尘不染

您只需将其放在任何测试文件中就可以了。使用相同package子句的测试文件属于同一测试包,并且可以引用彼此的导出 _和_未导出标识符,而无需任何import语句。

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

例如,如果您正在编写package a,则具有以下文件:

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

对于黑盒测试,您可以package a_testa_test.go和中使用package子句b_test.go。有一个func util()in文件a_test.go,您也可以在其中使用它b_test.go

如果要编写白盒测试,则可以package a在测试文件中使用它,并且可以再次引用a_test.go从中声明的标识符b_test.go(反之亦然),而无需任何导入。

请注意,但是,如果该包的条款a_test.gob_test.go不匹配(例如,a_test.go用途package ab_test.go使用packagea_test),那么他们将属于不同的测试包,那么你就不能使用标识符彼此声明。

2020-07-02