在正常运行时阻塞,但在单元测试期间不阻塞(StoreAsync)
本文关键字:StoreAsync 运行时 单元测试 | 更新日期: 2023-09-27 18:27:34
我在这里遇到了一个问题,在单元测试期间,StoreAsync()方法返回。当在没有调试的情况下运行时,它似乎永远不会返回,即使它是一个异步方法。
什么东西?
DataWriter writer = new DataWriter(_client.OutputStream);
writer.WriteBytes(payload);
await writer.StoreAsync(); // <--- returns only during unit test
writer.DetachStream();
如果您使用的是VS 11 Beta,请确保您的单元测试声明为async Task
。
如果您使用的是VS11开发人员预览版,那么请使用CodePlex中的异步单元测试项目。
我在博客上有更多关于异步单元测试的信息(第1部分,第2部分)。总结:
- 当
await
需要(异步)等待时,它会调度一个延续并返回给它的调用者 - MSTest看到测试方法返回,没有看到任何异常,并将其标记为"已通过"
- 稍后,
StoreAsync
将完成,方法的其余部分将运行(在线程池线程上,而不是在该单元测试的上下文中)
VS11Beta增加了对async Task
单元测试方法的一流支持。因此,上面的第二步不同:MSTest看到测试方法返回,但知道在Task
完成之前不要认为它是完整的。
异步单元测试项目采用不同的方法:它为[AsyncTestClass]
中的每个单元测试方法应用异步上下文。这个异步上下文在完成单元测试之前等待所有异步操作完成(包括async void
方法)。