问题标签 [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 回答
936 浏览

go - 如何设置模拟函数的返回值?

我正在使用gomock创建用于单元测试的模拟对象。以下为模拟对象提供了一个名为 GetQuestionById 的方法,并告诉模拟控制器期望使用参数 1 调用该方法:

但是我如何指定被模拟的方法应该返回一个特定的值呢?

0 投票
1 回答
1386 浏览

unit-testing - 如何在构建期间运行 mockgen?

我已经开始使用gomock来创建用于单元测试的模拟对象。Gomock 要求我运行mockgen带有特定参数的命令,以便为模拟生成代码。每次被模拟的接口发生变化时,都需要再次执行此操作。因此,我认为使用适当的论点可能go build是有意义的。mockgen

有没有办法go build在构建包之前运行脚本或 shell 命令?

如果没有,您如何生成模拟并使其保持最新?

0 投票
1 回答
780 浏览

unit-testing - 如何在 Go 中测试呼叫期望

我有一个要测试的 MyClass 类。

MyClass 有一个调用内部服务器做某事的 void 方法。

我想模拟服务器调用 Send,但由于该方法是一个 void 方法,我不能确定我实际上调用它是正确的。

这些是我想到的选项:

  1. 使用 gomock,mock 服务端,对服务的 send 方法设置期望
  2. 创建我自己的 MockServer,并用一堆验证“覆盖”方法 Send。就像是:

func (d *MockedServer) Send(message) // 验证消息...

  1. 创建我自己的 MockServer,但不是在方法中验证期望,而是将消息添加到消息列表中,然后验证列表的内容。

Go 中有什么更好的方法?

0 投票
1 回答
3073 浏览

go - Golang:如何使用 gomock 模拟 ...interface{} 争论

我有一个Printer使用标准 goPrintf函数签名的接口:

我希望能够使用gomock模拟这个界面,但我不确定如何tokens ...interface{}正确设置参数。

我希望这Printf(gomock.Any(), gomock.Any())将涵盖所有潜在情况(因为tokens编译为[]interface{}),但看来您需要为 N 个令牌设置显式调用:

有谁知道更好的方法来做到这一点?

0 投票
1 回答
3312 浏览

testing - 哪个目录放置模拟?

我最近一直GoMock在试验 Go 语言的官方创建者支持的测试模拟框架。我想知道放置这些模拟文件的最合理位置在哪里。

我当前的目录结构如下。这就是 Go 项目的结构吗?

这受本·约翰逊 (Ben Johnson)在这里的演讲的影响。

0 投票
3 回答
3906 浏览

unit-testing - 如何在golang中将url注入httptest.server?

对于句子

如果我想在单元测试中模拟对这个 client.Get() 的响应,我应该使用 httptest.server,但是如何将 url ( https://www.xxxxx/day?time=%s ) 绑定到httptest.server 的网址?这样当我调用 client.Get() 时,它可以返回我之前设置的响应。出于某种原因,我不能在这里模拟客户。

0 投票
1 回答
5649 浏览

unit-testing - 测试和模拟一个不返回任何值的函数

我想测试一个函数,它不返回任何值,而是触发其他函数。在阅读有关测试的信息时,我发现这被称为行为验证,通过模拟,我可以检查触发了哪些功能以及触发的顺序。但是,我在为我的代码实现正确的模拟技术时遇到了问题。

让我们考虑以下接口和结构的简单示例(示例非常基础,只是为了更容易解释):

现在,我想测试功能DoSomething。由于它不返回任何值,我想要做的是测试在使用参数 3 调用此函数后是否会发生以下事件链:DoEvenMore使用参数调用函数一次,使用参数调用6下一个函数AndEvenMore9

我写了以下模拟测试:

但是,当我运行此测试时,我收到错误:Unexpected call to *mocks.MockExampleInterface.DoSomething(..).

在这样的例子中我应该如何正确地执行模拟?

0 投票
0 回答
337 浏览

go - 如何模拟返回结构的方法?

这是一个小golang程序,它通过连接到 localhostssh并执行一些sftp类似的操作。它工作正常,但我想让该doTheWork()功能更可测试。

我已经阅读了使用gomock为接口创建模拟的内容。所以我已经创建了两个接口,SftperWalker,我正在使用它们而不是sftp直接调用 's 方法。

我想做的是从stfp里面模拟出所有的东西doTheWork()Close()很简单,因为它只返回一个error(或nil)。但Create()返回*sftp.File,这是一个结构,而不是一个接口。与Walk()which 返回另一个结构相同。我必须在我的测试代码中创建这些结构之一,如果不实际调用真正的sftp库并建立远程连接并创建远程文件,这实际上是不可能的,而这正是我想要模拟的。

我错过了什么?

0 投票
1 回答
1224 浏览

go - 在反射模式下使用 mockgen

我正在尝试为现有库编写一些测试,但无法让 gomock 工作

如果 rand.Read 失败,我想测试行为。这是我想测试的示例。我想查看在测试中执行的 log.Error 行

gomock 系统应该让我强制“rand.Read”调用做正​​确的事情

但是,我无法让 mockgen 工具在“反射”模式下工作

我在 Ubuntu 14.04 上使用 go 版本 go1.9.2 linux/amd64

genmock -prog_only 'crypto/rand' Read 工作正常,但它生成的代码看起来对我需要做的事情没有用

0 投票
2 回答
3514 浏览

unit-testing - 是否有任何选项可以使用类似于 mockito 参数捕获器的东西?

我们正在使用 gopkg.in/mgo.v2/bson 与 mongo 对话,它的 API 填充传递的结构而不是返回结果,例如:

当我想模拟/测试使用它的代码时会出现问题。我想模拟这个执行并以某种方式在“结果”中获得 pupulated 值。目前测试有:

所以你可以看到我没有得到任何值,我只是配置 gomock 来检查当我运行我的方法时查询。必须调用一个。我不能像这样传递结构

因为测试代码和实际代码中的 mystruct 是不同的,验证模拟会失败(引用不同)。我正在寻找类似于 mockito 的参数捕获器的东西: https ://static.javadoc.io/org.mockito/mockito-core/2.6.9/org/mockito/ArgumentCaptor.html