你在哪里储存可重复使用的嘲笑?

时间:2017-03-11 17:33:39

标签: unit-testing testing go mocking

请您解释一下组织单元测试的正确方法是什么?例如,如果想模拟我的struct依赖项,我需要创建一个模拟依赖项,其中"实现"一些界面。

我应该在哪里创建这个模拟器?它应该在同一个测试文件中创建吗?但是,如果我在另一个测试中需要它呢? Go不允许在同一个包的2个不同文件中定义具有相同名称的结构(例如UserServiceMock)。那么定义这个模拟结构的最佳位置是什么?

另一个问题。我应该自己实现这种模拟,还是有一些库/工具允许我这样做?

2 个答案:

答案 0 :(得分:1)

我将我的模拟存储在一个模拟包中,因此我可以从不同的测试包中调用它们,并在我的测试中使用该包名称作为我嘲笑依赖项的指示。例如:

mock.UserService

您可以创建生成器或使用GoMock

答案 1 :(得分:0)

我也遇到了这个问题,我通过在单独的文件中放置模拟接口及其声明来解决它。

mockery -dir=service  -all -inpkg

我使用mockery生成它们,这将在同一个文件夹中创建mock。按照上面的命令,它将为服务目录中存在的每个接口生成一个单独的文件。例如:mock_MyInterface.go

如果你没有使用-inpkg标志,它会在默认文件夹mocks中创建模拟,但是它不会在模拟实现中添加任何前缀,因此当你愿意时它会产生问题在单元测试中导入mocks包,因为由于模拟和原始实现具有相同名称而导致冲突。