我有一个我想测试的MyClass类。
MyClass有一个void方法,可以调用内部服务器来执行某些操作。
func (d *MyClass) SendToServer(args)
do stuff....
server.Send(myMessage)
我想模拟服务器调用Send,但由于该方法是一种void方法,我无法确定我实际上是在调用它。
这些是我想到的选项:
func(d * MockedServer)发送(消息) //验证消息......
Go中有什么更好的方法?
答案 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中描述了这一点。