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

Unit testing Go包中的测试共享代码放在哪里?,unit-testing,go,Unit Testing,Go,我有一个包含多个文件的Go软件包。作为Go标准,我正在为包中的每个源文件创建一个关联的测试文件 在我的例子中,不同的测试使用相同的测试帮助功能。我不希望这些函数出现在包源文件中,因为它只用于测试目的。我还希望避免在每个测试文件中复制此代码 我应该把所有测试源文件之间共享的代码放在哪里,而不是包的一部分?您只需要把它放在任何测试文件中,就可以了。使用同一package子句的测试文件属于同一测试包,可以引用彼此导出和未导出的标识符,而无需任何import语句 还请注意,您不需要为每个.go文件创建单

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

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


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

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

还请注意,您不需要为每个
.go
文件创建单独的
\u test.go
文件;您可以有一个
xx_test.go
文件,而不必在包中有一个“匹配的”
xx.go
文件

例如,如果您正在编写包
a
,则包含以下文件:

a/
    a.go
    b.go
    a_test.go
    b_test.go
对于黑盒测试,您可以使用
a\u测试.go
b\u测试.go
中的
package a\u测试
package子句。在文件
a\u test.go
中有一个
func util()
,您也可以在
b\u test.go中使用它

如果您正在编写白盒测试,您将在测试文件中使用
package a
,同样,您可以从
b\u test.go
引用
a\u test.go中声明的任何标识符,而无需任何导入


但是请注意,如果
a_测试.go
b_测试.go
中的包条款不匹配(例如
a_测试.go
使用
包a
b_测试。go
使用
包a_测试
),然后它们将属于不同的测试包,并且您不能使用彼此声明的标识符。

如果仅用于测试,则在任何
\u test.go
文件中。如果要跨包重用测试代码,您该怎么做?Go不允许导入测试代码。@PeterDotchev您不能导入作为测试包一部分的代码,但如果您想在多个测试中重用代码,请将其放入非测试包中,这样您也可以从测试中导入代码。如果我将测试代码放入非测试包中,它会包含在我的生产二进制文件中吗?@PeterDotchev,前提是非测试包也导入它,否则它不会。