英文:
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.Model
gateways
为了测试而导入了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.
gateways
defines modelsmocks
importsgateways.Model
gateways
importsmocks
for 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
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论