问题标签 [gomock]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
931 浏览

unit-testing - 如何只模拟接口的一种方法

我正在努力理解 Go 中的模拟(正在寻找与 Go 中的 java 等效的 Mockito.spy 相关的东西)。

假设我在 Go 中有一个带有 5 个方法的接口。但是我要测试的那段代码只引用了两种方法。现在我如何在不实现所有方法的情况下模拟这种依赖关系,即我在源代码中的实际实现实现了 5 个接口方法,但是有没有办法避免在测试文件中实现 5 个方法的虚拟接口实现。以下是我目前正在做的方式,实现5个方法是可以管理的,但是如果接口有20个方法怎么办,模拟实现测试文件中的所有方法变得乏味。

例子:

handler.go 中的源代码:

api.go 中的源代码:

测试类代码:

问题:

有没有办法只模拟我在上述情况下只需要 methodOne() 和 methodTwo() 方法,而不用担心测试中的剩余方法?如果存在,您能否建议任何其他替代方案?谢谢

0 投票
1 回答
1995 浏览

unit-testing - 你如何覆盖在 GoMock 中进行的调用?

我正在尝试编写单元测试来模拟使用 GoMocks 进行的服务调用,这是一场真正的斗争。

我试图简化代码的一种方法是创建一个私有方法,该方法为所有模拟提供良好的响应,然后在每个需要模拟调用的不同响应的单独测试中(例如,测试模拟失败),我想要用不同的响应覆盖该调用。

例如,setupMocks fn(已擦洗)

当我在“成功”场景中使用 setupMocks fn 时,它工作正常。

但是,如果我尝试在另一个单元测试中使用它来测试如何处理服务调用中的错误,那么 gomocks 将使用 setupMocks fn 中的 mockResponse 设置,而不是我想要覆盖的那个。

是否有一个电话或我可以在 GoMocks 中做些什么来EXPECT()用其他东西覆盖模拟响应而不是附加callstack?

0 投票
1 回答
2064 浏览

go - 如何在 Go 中正确测试控制器类

我正在使用 gomock 生成一个业务层并模拟它的方法结果。到目前为止,我无法通过测试,这是说“想要”和“得到”的价值观不同

我将我的对象的 json 表示传递给 strings.NewReader 并且“Want”带有一个值“等于 { { ...”,这可能是问题所在。

编辑:

我做了@bigpigeon 提到的

结果相同

0 投票
2 回答
223 浏览

go - 是否可以断言通过像 Java Mockito 一样在 Go 中进行间谍活动调用了一个真正的方法?

我正在寻找断言我的测试中涵盖了一个语句。例如,假设从测试中调用引用了 methodB() 的 methodA()。

我想断言在从测试中执行 methodA() 时会调用 methodB() 。

在下面的代码中,我如何在 Go 测试中断言 svc.AddCheck() 在执行 svc.OnStartup() 时被调用?

0 投票
2 回答
12588 浏览

go - 查找模块的版本

我们正在使用 Go 模块。我想在 CLI 中获取模块的特定版本。可能吗?

如果你很好奇,原因是我想添加以下generate命令:

所以我需要以某种方式获取版本

0 投票
3 回答
4005 浏览

go - 我可以模拟一个需要使用指针参数的函数吗

假设我们有一个库提供了一个函数 Double 来将整数加倍,我们使用指针 i 来获取结果值,而不是通过返回:

在我们的主要功能中,我们使用这个库来完成我们的任务。像这样:

现在我们需要测试 task() 函数,如何通过模拟 Double 函数获得指针返回?

这是测试:

这里的代码:https ://github.com/hotsnow/mock.git (stackoverflow 分支)

0 投票
0 回答
681 浏览

go - Gomock SetArg() 恐慌

我正在尝试使用 gomock 来模拟一个调用SuccessHandler来测试函数的接口。

我拥有的接口:

并实现Item

请注意,由于SetResults修改了结构,它总是在指针接收器上实现。

我想要模拟做的就是将调用MyItem时的结果设置为参数,并修改参数的值。这是我尝试为模拟做的事情:HandleSuccess()MyItem

这会导致以下情况出现恐慌:

然后,我尝试将变量更改为只是一个结构:

这不会惊慌,但最终不会改变Result.

关于我做错了什么的任何想法?

0 投票
1 回答
1331 浏览

unit-testing - 如何比较/匹配模拟中的闭包?

TL;DR:模拟方法接受闭包。我想知道如何创建自定义匹配器(https://godoc.org/github.com/golang/mock/gomock#Matcher):闭包本身又使用私有结构 - 这意味着我什至不能在我的测试以检查它是否符合预期。


我正在 nlopes/slack ( https://github.com/nlopes/slack ) 的帮助下使用 Slack API 开发一个小型应用程序。

为了测试,我用 gomock 模拟 nlopes/slack。为此,我创建了界面

我在测试 OpenConversation 或 GetUserByEmail 时没有问题,例如

当涉及到 PostMessage 时,事情变得更加复杂。在主代码中,调用看起来像

而 slack.MsgOptionText (来自 nlopes/slack)实际上正在返回闭包:

由于方法接受关闭,我需要创建自定义 gomock 匹配器(https://godoc.org/github.com/golang/mock/gomock#Matcher)。自定义匹配器本身不是问题,它看起来像

但是,由于 MsgOptionText 使用 nlopes/slack 私有结构 sendConfig,我想知道如何在我的测试范围内使用它来检查与预期的相等性。

我应该如何解决这样的问题?

0 投票
2 回答
5049 浏览

unit-testing - 意外调用模拟(gomock)gRPC

我有 gRPC 服务(比如 svc1),它使用它的 gRPC 存根(比如 svc2_client)调用另一个 gRPC 服务。

我已经为 svc2_client 生成了客户端模拟。根据文档进行的单元测试工作正常,即使用生成的模拟测试 svc2_client。

但是,我有 svc1,如下所示:

预期行为
期待它成功

重现行为的重现
步骤:

返回错误:

围棋新手,你能帮我吗?

附加信息:

  • gomock 模式(来源):来源
  • gomock 版本或 git 参考:github.com/golang/mock v1.4.3
  • golang 版本:go 版本 go1.14 darwin/amd64
0 投票
2 回答
67 浏览

go - 模拟非接口函数

我有一个像这样的 Go 代码

我想为SetRequestMap.

如何在checkStatusOnline不为模拟实现任何额外功能的情况下模拟?