我的golang库中有一些测试帮助程序代码,我想在各种子包中进行测试时使用这些代码。但是,我遇到了一个障碍:

要使用test_helpers_test.go中的代码,我必须导入外package。但是,当我从something_test.go导入外部包时,它抱怨" test中不允许导入周期"

因此,我尝试为共享测试助手创建一个程序包:

现在它抱怨" / home / karl / Projects / outer / test中没有非测试Go文件"

我不想称其为test_helpers.go,因为它是我的测试代码的一部分,而不是我的库代码的一部分。我不想将该代码发送到库中。

我该如何解决?

更新:我可以通过在test目录中创建一个dummy.go文件来解决此问题,但是现在有一个新问题:导入程序包不要导入其测试代码!所以现在我得到:./something_test.go:12:2: undefined: test.AssertDoesPanic

很正确,您不能从另一个包中导入测试代码,因此您的助手功能必须放入适当的代码文件中,而不是测试文件中。

如果不是从非测试代码中导入的,则不会将其内置到最终的二进制文件中。

作者倾向于调用软件包...test来表明它只是测试助手,例如标准库中的httptest或开源中的zaptest

https://golang.org/pkg/net/http/httptest/
https://godoc.org/go.uber.org/zap/zaptest

继问题8279之后,我已经看到添加了虚拟文件,例如在tommie/acme-cli中,提交479f8c7

作为一种解决方法,查看是否可以在此处提供帮助。

如上所述,在内部软件包(来自Go 1.4)中使用测试帮助程序代码是另一种选择,因为该项目中的任何客户端都无法访问该帮助程序。参见设计文件。
您可以看到它在典型的Go项目布局中使用。