我有一个函数说
Myfunction() {
x.RunAsync() //Async Function call
}
我必须为 Myfunction()
编写一个测试用例。我正在为此使用 go-mock。还有 mocked x
。
Test_MyFunction() {
mockCtrl := gomock.NewController(t)
defer mockCtrl.Finish()
//EXPECT() call to stub RunAsync()
}
现在的问题是我的测试运行成功,但不知何故最后它 panic 地说,对 mockX.RunAsync()
的调用丢失了。
我认为这是因为在我的 RunAsync 被 stub 之前正在执行延迟。
如何确保所有 Async 函数在执行 defer 之前运行。
最佳答案
如果测试替身被用作 stub ,那么您应该对其调用 .AnyTimes()
。这样 gomock 就不会关心 go 例程是否完成了。
但是,如果您想对其进行断言(因此它是一个模拟而不是 stub ),那么您需要确保在让测试完成之前执行了 go 例程。
关于unit-testing - 如何确保所有异步函数在执行 defer 之前运行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53751228/