我有一个功能说
Myfunction() {
x.RunAsync() //Async Function call
}
我必须为Myfunction()
编写一个测试用例。我正在为此使用模拟。也嘲笑了x
。
Test_MyFunction() {
mockCtrl := gomock.NewController(t)
defer mockCtrl.Finish()
//EXPECT() call to stub RunAsync()
}
问题现在是我的测试成功运行了,但最终它慌张地说,缺少对mockX.RunAsync()
的调用。
我认为这是因为在对RunAsync进行存根之前执行了defer。
如何确保所有异步功能在执行延迟之前运行。
答案 0 :(得分:1)
如果将测试双数用作存根,则应在其上调用.AnyTimes()
。这样,gomock不会在乎go例程是否已完成。
但是,如果您要对其声明(因此是一个模拟而不是一个存根),那么您需要确保go例程已执行,然后才能完成测试。