登录
首页 >  Golang >  Go问答

如何封装 Golang 测试辅助程序代码?

来源:stackoverflow

时间:2024-03-06 12:03:28 443浏览 收藏

学习知识要善于思考,思考,再思考!今天golang学习网小编就给大家带来《如何封装 Golang 测试辅助程序代码?》,以下内容主要包含等知识点,如果你正在学习或准备学习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 因为它是我的测试代码的一部分,而不是我的库代码。我不想在库中发送该代码。

如何解决这个问题?

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


解决方案


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

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

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

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

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 中使用。

以上就是《如何封装 Golang 测试辅助程序代码?》的详细内容,更多关于的资料请关注golang学习网公众号!

声明:本文转载于:stackoverflow 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>