我在我的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
发布于 2019-06-02 05:13:38
您是正确的,您不能从另一个包导入测试代码,因此您的助手函数必须进入正确的代码文件,而不是测试文件。
如果它不是从非测试代码中导入的,那么它就不会被构建到最终的二进制文件中。
作者倾向于调用包...test来表示它只是测试助手,例如标准库中的httptest或开源中的zaptest。
https://golang.org/pkg/net/http/httptest/ https://godoc.org/go.uber.org/zap/zaptest
发布于 2019-06-01 06:24:58
在go第8279期之后,我看到添加了虚拟文件,就像在提交479f8c7中一样
outer/outer.go
// +build ignore+
package outer看看这能不能帮上忙,作为一个解决办法。
如上所述,在内部包(来自Go 1.4+)中使用测试助手代码是另一种选择,因为该项目的任何客户端都无法访问所述的帮助程序。见设计文件。
您可以看到它在典型围棋项目布局中使用。
https://stackoverflow.com/questions/56404355
复制相似问题