问题标签 [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.
go - 如何设置模拟函数的返回值?
我正在使用gomock创建用于单元测试的模拟对象。以下为模拟对象提供了一个名为 GetQuestionById 的方法,并告诉模拟控制器期望使用参数 1 调用该方法:
但是我如何指定被模拟的方法应该返回一个特定的值呢?
unit-testing - 如何在构建期间运行 mockgen?
我已经开始使用gomock来创建用于单元测试的模拟对象。Gomock 要求我运行mockgen
带有特定参数的命令,以便为模拟生成代码。每次被模拟的接口发生变化时,都需要再次执行此操作。因此,我认为使用适当的论点可能go build
是有意义的。mockgen
有没有办法go build
在构建包之前运行脚本或 shell 命令?
如果没有,您如何生成模拟并使其保持最新?
unit-testing - 如何在 Go 中测试呼叫期望
我有一个要测试的 MyClass 类。
MyClass 有一个调用内部服务器做某事的 void 方法。
我想模拟服务器调用 Send,但由于该方法是一个 void 方法,我不能确定我实际上调用它是正确的。
这些是我想到的选项:
- 使用 gomock,mock 服务端,对服务的 send 方法设置期望
- 创建我自己的 MockServer,并用一堆验证“覆盖”方法 Send。就像是:
func (d *MockedServer) Send(message) // 验证消息...
- 创建我自己的 MockServer,但不是在方法中验证期望,而是将消息添加到消息列表中,然后验证列表的内容。
Go 中有什么更好的方法?
go - Golang:如何使用 gomock 模拟 ...interface{} 争论
我有一个Printer
使用标准 goPrintf
函数签名的接口:
我希望能够使用gomock模拟这个界面,但我不确定如何tokens ...interface{}
正确设置参数。
我希望这Printf(gomock.Any(), gomock.Any())
将涵盖所有潜在情况(因为tokens
编译为[]interface{}
),但看来您需要为 N 个令牌设置显式调用:
有谁知道更好的方法来做到这一点?
unit-testing - 如何在golang中将url注入httptest.server?
对于句子
如果我想在单元测试中模拟对这个 client.Get() 的响应,我应该使用 httptest.server,但是如何将 url ( https://www.xxxxx/day?time=%s ) 绑定到httptest.server 的网址?这样当我调用 client.Get() 时,它可以返回我之前设置的响应。出于某种原因,我不能在这里模拟客户。
unit-testing - 测试和模拟一个不返回任何值的函数
我想测试一个函数,它不返回任何值,而是触发其他函数。在阅读有关测试的信息时,我发现这被称为行为验证,通过模拟,我可以检查触发了哪些功能以及触发的顺序。但是,我在为我的代码实现正确的模拟技术时遇到了问题。
让我们考虑以下接口和结构的简单示例(示例非常基础,只是为了更容易解释):
现在,我想测试功能DoSomething
。由于它不返回任何值,我想要做的是测试在使用参数 3 调用此函数后是否会发生以下事件链:DoEvenMore
使用参数调用函数一次,使用参数调用6
下一个函数AndEvenMore
9
我写了以下模拟测试:
但是,当我运行此测试时,我收到错误:Unexpected call to *mocks.MockExampleInterface.DoSomething(..)
.
在这样的例子中我应该如何正确地执行模拟?
go - 如何模拟返回结构的方法?
这是一个小golang
程序,它通过连接到 localhostssh
并执行一些sftp
类似的操作。它工作正常,但我想让该doTheWork()
功能更可测试。
我已经阅读了使用gomock为接口创建模拟的内容。所以我已经创建了两个接口,Sftper
和Walker
,我正在使用它们而不是sftp
直接调用 's 方法。
我想做的是从stfp
里面模拟出所有的东西doTheWork()
。Close()
很简单,因为它只返回一个error
(或nil
)。但Create()
返回*sftp.File,这是一个结构,而不是一个接口。与Walk()
which 返回另一个结构相同。我必须在我的测试代码中创建这些结构之一,如果不实际调用真正的sftp
库并建立远程连接并创建远程文件,这实际上是不可能的,而这正是我想要模拟的。
我错过了什么?
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
工作正常,但它生成的代码看起来对我需要做的事情没有用
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