1 回答
TA贡献1735条经验 获得超5个赞
我会放弃间谍的东西。此任务非常简单,您不需要外部依赖项来处理它。您可以改为制作自己的“间谍”,它有一个通道,它在调用函数时将 args 传递到其中。在您的测试中,您然后尝试从频道接收。这将强制测试等待回调函数被调用。您还可以考虑添加一个超时时间,这样测试就可以失败,而不是在函数从未被调用时永远阻塞。
// outside the test function
type MySpy struct {
Args chan MySpyArgs
}
type MySpyArgs struct {
Res CallResultSt
Data interface{}
}
func (my *MySpy) Callback(res CallResultSt, data interface{}) {
my.Args <- MySpyArgs{Res: res, Data: data}
}
//in the test function
spyChan := make(chan MySpyArgs)
spy := &MySpy{spyChan}
//...some table-driven test logic the generator came up with, containing my data
args := <-spyChan
// can now assert arguments were as you expected, etc.
一个粗略的工作示例:https ://play.golang.org/p/zUYpjXdkz-4 。
如果你想使用超时:
...
select {
case args := <-spyChan:
// assertions on args
case <-time.After(5 * time.Second):
// prevent blocking for over 5 seconds and probably fail the test
}
- 1 回答
- 0 关注
- 118 浏览
添加回答
举报