如何确保在执行 defer 之前所有 Async 函数 运行
How to ensure that all Async functions Run before defer is executed
我有一个函数说
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()
的调用丢失了。
我认为这是因为在我的 RunAsync 被存根之前正在执行延迟。
如何确保所有异步函数 运行 在执行 defer 之前。
如果测试替身被用作存根,那么您应该对其调用 .AnyTimes()
。这样 gomock 就不会关心 go 例程是否完成了。
但是如果您想对其进行断言(因此它是模拟而不是存根),那么您需要确保在让测试完成之前执行了 go 例程。
我有一个函数说
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()
的调用丢失了。
我认为这是因为在我的 RunAsync 被存根之前正在执行延迟。
如何确保所有异步函数 运行 在执行 defer 之前。
如果测试替身被用作存根,那么您应该对其调用 .AnyTimes()
。这样 gomock 就不会关心 go 例程是否完成了。
但是如果您想对其进行断言(因此它是模拟而不是存根),那么您需要确保在让测试完成之前执行了 go 例程。