我有一个函数,比如
Myfunction() {
x.RunAsync() //Async Function call
}
我必须为Myfunction()
编写一个测试用例。我正在使用go mock。还嘲笑了x
。
Test_MyFunction() {
mockCtrl := gomock.NewController(t)
defer mockCtrl.Finish()
//EXPECT() call to stub RunAsync()
}
现在的问题是我的测试成功运行,但不知怎么的,最后它惊慌失措地说,对mockX.RunAsync()
的调用丢失了。我认为这是因为defer是在我的RunAsync被存根之前执行的。如何确保在执行defer之前运行所有异步函数。
如果测试double被用作存根,那么你应该在它上调用.AnyTimes()
。这样,gomock就不在乎go例程是否完成了。
但是,如果您想对它进行断言(因此它是一个mock而不是stub(,那么您需要确保在测试完成之前执行了go例程。