英文:
Which directory to put mocks?
问题
我最近一直在尝试使用Go语言官方支持的测试模拟框架GoMock。我想知道将这些模拟文件放在哪个位置最合理。
我的当前目录结构如下。这是Go项目应该的结构吗?
appname
|-- gateways
|-- gateway1.go
|-- gateway1_test.go
|-- gateway2.go
|-- gateway2_test.go
|-- mocks
|-- gateway1.go
|-- gateway2.go
这个结构受到了Ben Johnson在这里的演讲的影响。
英文:
I've been most recently experimenting with GoMock, the test mocking framework supported by the official creators of the Go language. I was wondering where is the most reasonable place to put these mocked files.
My current directory structure is as follows. Is this how Go projects should be structured?
appname
|-- gateways
|-- gateway1.go
|-- gateway1_test.go
|-- gateway2.go
|-- gateway2_test.go
|-- mocks
|-- gateway1.go
|-- gateway2.go
This is slightly influenced by Ben Johnson's talk here.
答案1
得分: 4
我倾向于遵循本文,作者是Ben Johnson。
总的来说,将共享的模拟对象放在一个包中的做法是不错的。这里值得指出的一点是,如果你不将模型定义在gateways包之外,可能会出现导入循环的问题。
gateways定义了模型mocks导入了gateways.Modelgateways为了测试而导入了mocks
有两种方法可以解决这个问题;第一种方法是将模型移到domain中,即gateways之外的根包(请参考文章中的示例)。或者只通过在测试文件中使用gateways_test作为包来测试gateways包的公共接口。
英文:
I tend to follow this article also by Ben Johnson
In general this approach of having a package for your shared mocks is a good one. One thing worth pointing out here is that if you don't define your models outside of the gateways package you could get an import cycle.
gatewaysdefines modelsmocksimportsgateways.Modelgatewaysimportsmocksfor tests
There are 2 ways to fix this; the first is just to move your models into domain, a root package outside gateways (see article for examples). Or only test the public interface of your gateways package by using gateways_test as the package in your test files.
答案2
得分: 0
我将其放在与我的接口相同的包中,我认为这是一个好的位置,因为它与继承的结构分开。我认为你的项目结构不好,我更喜欢以下方式(基于DDD架构):
示例:
appname
|-- gateways
|-- gateway.go // 这个文件包含接口和模拟对象
|-- gateway1
|-- gateway1.go
|-- gateway1_test.go
|-- gateway2
|-- gateway2.go
|-- gateway2_test.go
英文:
I place it in the same package as my interface and in my opinion it's a good place because it's separated from inherited structs I think your project structure is not good I rather do below (its base on DDD architecture)
example
appname
|-- gateways
|-- gateway.go //this file contain interface and mocks
|-- gateway1
|-- gateway1.go
|-- gateway1_test.go
|-- gateway2
|-- gateway2.go
|-- gateway2_test.go
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。


评论