如何在Go中测试呼叫期望

时间:2015-01-30 09:50:00

标签: unit-testing go gomock

我有一个我想测试的MyClass类。

MyClass有一个void方法,可以调用内部服务器来执行某些操作。

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

我想模拟服务器调用Send,但由于该方法是一种void方法,我无法确定我实际上是在调用它。

这些是我想到的选项:

  1. 使用gomock,模拟服务器,并对服务的发送方法设置期望
  2. 创建我自己的MockServer,"覆盖"方法发送带有一堆验证。类似的东西:
  3. func(d * MockedServer)发送(消息)       //验证消息......

    1. 创建我自己的MockServer,但不是验证方法中的期望,而是将消息添加到消息列表中,然后验证列表的内容。
    2. Go中有什么更好的方法?

1 个答案:

答案 0 :(得分:2)

你可以用这样的方法制作一个函数:

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中描述了这一点。