unit-testing - 如何在 Go 中测试调用期望

标签 unit-testing go gomock

我有一个要测试的 MyClass 类。

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

func (d *MyClass) SendToServer(args)
  do stuff....
  server.Send(myMessage)

我想模拟服务器调用 Send,但由于该方法是一个 void 方法,我无法确定我是否真的正确调用了它。

这些是我想到的选项:

  1. 使用gomock,模拟服务器,对服务的发送方法设置期望
  2. 创建我自己的模拟服务器,并用一堆验证“覆盖”发送方法。像这样的东西:

func (d *MockedServer) 发送(消息) //验证消息...

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

Go 中更好的方法是什么?

最佳答案

你可以像这样从你的方法中创建一个函数:

var sendToServer = (*Server).Send

func func (d *MyClass) SendToServer(args) {
    // ...
    sendToServer(server, msg)
    // ...
}

在你的测试中:

func TestMyClass_SendToServer(t *testing.T) {
    // ...
    sent := false
    sendToServer = func(*Server, args) {
        sent = true
    }
    mc.SendToServer(args)
    if !sent {
        t.Error("fail")
    }
}

这在 Andrew Gerrand 的 Testing Techniques talk 中有所描述.

关于unit-testing - 如何在 Go 中测试调用期望,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28233174/

相关文章:

unit-testing - 使用 Gomock 测试返回错误 : Expected call has already been called the max number of times

unit-testing - 模拟 EntityManager (Mockito)

c# - 单元测试 c# 和测试私有(private)方法的问题

arrays - Golang-无效的数组绑定(bind)

go - channel 就绪时从多个 channel 中选择所有值

benchmarking - Go 语言基准测试?

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

go - 如何在 Go 中正确测试 Controller 类

unit-testing - Karma 调试显示空屏幕

unit-testing - 调用更改模拟对象中的模拟对象