如何确保所有异步功能在执行延迟之前运行

时间:2018-12-12 20:57:52

标签: unit-testing go asynchronous gomock

我有一个功能说

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。 如何确保所有异步功能在执行延迟之前运行。

1 个答案:

答案 0 :(得分:1)

如果将测试双数用作存根,则应在其上调用.AnyTimes()。这样,gomock不会在乎go例程是否已完成。

但是,如果您要对其声明(因此是一个模拟而不是一个存根),那么您需要确保go例程已执行,然后才能完成测试。