将测试的共享代码放在 Go 包中的何处?

chm*_*ike 6 unit-testing go

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

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

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

icz*_*cza 5

您只需将其放入任何测试文件中即可。使用相同包子句的测试文件属于同一个测试包,可以相互引用彼此的导出未导出标识符,无需任何import声明。

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

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

a/
    a.go
    b.go
    a_test.go
    b_test.go
Run Code Online (Sandbox Code Playgroud)

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

如果您正在编写白盒测试,您将package a在测试文件中使用,同样,您可以引用在a_test.gofrom 中声明的任何标识符b_test.go(反之亦然)而无需任何导入。

但是请注意,如果包子句 ina_test.gob_test.go不匹配(例如a_test.gousespackage ab_test.gouses package a_test),那么它们将属于不同的测试包,然后您不能使用彼此声明的标识符。

  • 如果您想跨包重用测试代码,您会怎么做?Go 不允许导入测试代码。 (5认同)
  • @PeterDotchev 仅当非测试包也导入它时,否则不会。 (4认同)