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