这是布局的简要概述
<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包,因为它负责组件的初始化.相同的循环导入地狱.将初始化移动到测试用例中的每个位置似乎是代码的重复.仍在寻找一些优雅的解决方案……