如何打包 golang 测试助手代码?

Kar*_*arl 5 testing go

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

outer
|
+- test_helpers_test.go
|
+- inner
   |
   +- something.go
   +- something_test.go
Run Code Online (Sandbox Code Playgroud)

要使用 中的代码test_helpers_test.go,我必须导入外部包。但是当我从 导入外包时something_test.go,它抱怨“测试中不允许导入循环”

所以我尝试为共享测试助手制作一个包:

outer
|
+- test
|  |
|  +- test_helpers_test.go
|
+- inner
   |
   +- something.go
   +- something_test.go
Run Code Online (Sandbox Code Playgroud)

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

我不想调用它,test_helpers.go因为它是我的测试代码的一部分,而不是我的库代码。我不想在库中发送该代码。

我该如何解决这个问题?


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

Iai*_*can 8

您不能从另一个包导入测试代码是对的,因此您的辅助函数必须进入正确的代码文件而不是测试文件。

如果它不是从你的非测试代码中导入的,那么它就不会被构建到最终的二进制文件中。

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

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