加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

测试 – 在golang应用程序中组织测试并避免导入周期地狱

发布时间:2020-12-16 19:02:53 所属栏目:大数据 来源:网络整理
导读:我目前遇到了构建应用程序结构及其测试基础架构的问题. 这是布局的简要概述 GOROOT/src/myapp/controllers/GOROOT/src/myapp/controllers/account.go...GOROOT/src/myapp/models/GOROOT/src/myapp/models/account.goGOROOT/src/myapp/models/account_test.go
我目前遇到了构建应用程序结构及其测试基础架构的问题.

这是布局的简要概述

<GOROOT>/src/myapp/controllers/
<GOROOT>/src/myapp/controllers/account.go
...
<GOROOT>/src/myapp/models/
<GOROOT>/src/myapp/models/account.go
<GOROOT>/src/myapp/models/account_test.go
...
<GOROOT>/src/myapp/components/
<GOROOT>/src/myapp/components/comp1/
<GOROOT>/src/myapp/components/comp1/impl.go
<GOROOT>/src/myapp/components/comp1/impl_test.go
<GOROOT>/src/myapp/components/
...
<GOROOT>/src/myapp/testutil/
<GOROOT>/src/myapp/testutil/database.go
<GOROOT>/src/myapp/testutil/models.go
...

问题1

文件myapp / testutil / models.go包含模型/ * _ test.go测试中使用的一些util函数.
util函数实际上使用了包myapp / models数据结构和函数.因此我们有一个导入周期:account_test.go导入testutil包,后者又导入模型.

这里唯一明确的解决方案是将testutil / models.go保留在模块包内部的同一个包中,类似于test_utils.go,这对我来说似乎有些笨拙.在这种情况下,最好的解决办法是什么?

问题2

testutil包有一些comp1的初始化(假设它是第三方服务的客户端).当我们运行测试comp1 / impl_test.go时,导入testutil包,并导入comp1包,因为它负责组件的初始化.相同的循环导入地狱.将初始化移动到测试用例中的每个位置似乎是代码的重复.仍在寻找一些优雅的解决方案……

问题1

如果package testutils只提供在测试包模块期间使用的实用程序函数,那么只需将这些函数放入models / testutils_test.go:现在运行models / * _ test.go测试时将包含这些实用程序函数.没有进口周期了.

这是你“唯一明确的解决方案”,我看不到任何“笨拙”的东西.

问题2

导入周期:与上述相同.

初始化:你的comp1 / impl_test.go可以提供一个func init(),所以不需要重复的代码.

(标准库是如何测试不同东西的良好来源.测试代码中的IMHO代码重复不是七种致命罪之一.)

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读