1 回答

TA貢獻1735條經(jīng)驗 獲得超5個贊
我會放棄間諜的東西。此任務(wù)非常簡單,您不需要外部依賴項來處理它。您可以改為制作自己的“間諜”,它有一個通道,它在調(diào)用函數(shù)時將 args 傳遞到其中。在您的測試中,您然后嘗試從頻道接收。這將強制測試等待回調(diào)函數(shù)被調(diào)用。您還可以考慮添加一個超時時間,這樣測試就可以失敗,而不是在函數(shù)從未被調(diào)用時永遠阻塞。
// 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 關(guān)注
- 136 瀏覽
添加回答
舉報