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

我的 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


MM们
浏览 112回答 2
2回答

紫衣仙女

你是对的,你不能从另一个包导入测试代码,所以你的辅助函数必须进入正确的代码文件而不是测试文件。如果它不是从您的非测试代码中导入的,那么它就不会被构建到最终的二进制文件中。作者倾向于调用该包...test来表明它只是测试助手,例如httptest来自标准库或zaptest来自开源。

慕标5832272

在go issue 8279之后,我看到添加了虚拟文件,如tommie/acme-cli提交 479f8c7outer/outer.go // +build ignore+ package outer作为一种解决方法,看看这是否对这里有帮助。如上所述,在内部包(来自 Go 1.4+)中使用测试助手代码是另一种选择,因为该项目的任何客户端都无法访问该助手。见设计文件。您可以在典型的 Go 项目布局中看到它的使用。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go