unit-testing - 如何确保所有异步函数在执行 defer 之前运行

标签 unit-testing go asynchronous gomock

我有一个函数说

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/

相关文章:

python - 如果我只在测试套件运行期间使用一个库,它应该在我的 Pipfile 中的普通包还是开发包中?

c# - 使用 Web Api 2 Controller 测试的 Moq 在模拟 DbContext 中加载相关实体

objective-c - Objective-C - 单元测试 dispatch_async block ?

c# - 我正在尝试用 C# 为静态方法编写单元测试

user-input - 捕获间隔的用户输入

具有异步方法调用的 Java 服务

git - 我应该在 go 项目中使用 git 子模块吗?

arrays - 在 Golang 中定义包含 slice 的数组映射

javascript - 异步JS请求: setrequestheader authorization

Javascript for循环异步文件执行