我有一个要测试的 MyClass 类。
MyClass 有一个调用内部服务器做某事的 void 方法。
func (d *MyClass) SendToServer(args)
do stuff....
server.Send(myMessage)
我想模拟服务器调用 Send,但由于该方法是一个 void 方法,我无法确定我是否真的正确调用了它。
这些是我想到的选项:
- 使用gomock,模拟服务器,对服务的发送方法设置期望
- 创建我自己的模拟服务器,并用一堆验证“覆盖”发送方法。像这样的东西:
func (d *MockedServer) 发送(消息) //验证消息...
- 创建我自己的 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/