繁体   English   中英

如何打包golang测试帮助程序代码?

[英]How do I package golang test helper code?

我在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因为它是我测试代码的一部分,而不是我的库代码。 我不想在库中发送该代码。

我该如何解决这个问题?


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

去问题8279 ,我看到添加了虚拟文件,如tommie/acme-cli commit 479f8c7

outer/outer.go

// +build ignore+
package outer

看看这是否有帮助,作为一种解决方法。


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

你是对的,你不能从另一个包导入测试代码,所以你的帮助函数必须进入正确的代码文件而不是测试文件。

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

作者倾向于看涨包...test ,以表明它只是试验帮手,例如httptest从标准库或zaptest从开源。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM