我的golang库中有一些测试帮助程序代码,我想在各种子包中进行测试时使用。但是,我遇到了一个障碍:
outer
|
+- test_helpers_test.go
|
+- inner
|
+- something.go
+- something_test.go
要使用test_helpers_test.go
中的代码,我必须导入外部包。但是,当我从something_test.go
导入外包装时,它抱怨“测试中不允许导入周期”
所以我尝试为共享测试助手创建一个程序包:
outer
|
+- test
| |
| +- test_helpers_test.go
|
+- inner
|
+- something.go
+- something_test.go
现在它抱怨“ / home / karl / Projects / outer / test中没有非测试Go文件”
我不想称其为test_helpers.go
,因为它是我的测试代码的一部分,而不是我的库代码的一部分。我不想将该代码发送到库中。
我该如何解决?
更新:我可以通过在dummy.go
目录中创建一个test
文件来解决此问题,但是现在有一个新问题:导入程序包不要导入其测试代码!现在我得到:./something_test.go:12:2: undefined: test.AssertDoesPanic
答案 0 :(得分:2)
在go issue 8279之后,我看到添加了伪文件,如tommie/acme-cli
commit 479f8c7
outer/outer.go
// +build ignore+
package outer
作为一种解决方法,看看这是否对您有帮助。
如上所述,在internal package (from Go 1.4+)中使用测试帮助程序代码是另一种选择,因为该项目的任何客户端都无法访问该帮助程序。参见design document。
您可以在typical Go project layout中看到它。
答案 1 :(得分:0)
很正确,您不能从另一个包中导入测试代码,因此您的助手功能必须放入适当的代码文件中,而不是测试文件中。
如果不是从非测试代码中导入的,则不会将其内置到最终的二进制文件中。
作者倾向于调用软件包__my_builtin_va_start
来表示它只是测试助手,例如标准库中的...test
或开源中的httptest
。
https://golang.org/pkg/net/http/httptest/ https://godoc.org/go.uber.org/zap/zaptest