如何确保在执行 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 例程。