我有一个问题,在单元测试期间,StoreAsync()方法返回。在没有调试的情况下运行时,即使它是异步方法,它似乎也永远不会返回。
是什么给出了?
DataWriter writer = new DataWriter(_client.OutputStream);
writer.WriteBytes(payload);
await writer.StoreAsync(); // <--- returns only during unit test
writer.DetachStream();
答案 0 :(得分:0)
如果您使用的是VS 11 Beta,请确保您的单元测试声明为async Task
。
如果您使用的是VS 11 Dev Preview,请使用CodePlex中的Async Unit Tests project。
我在博客上提供了有关异步单元测试的更多信息(part 1,part 2)。总结:
await
需要(异步)等待时,它会安排一个延续并返回其调用者。StoreAsync
将完成,方法的其余部分将运行(在线程池线程上,而不是在该单元测试的上下文中)。 VS 11 Beta为async Task
单元测试方法增加了一流的支持。所以上面的第二步是不同的:MSTest看到测试方法返回,但知道在Task
完成之前不会认为它已完成。
异步单元测试项目采用不同的方法:它为[AsyncTestClass]
中的每个单元测试方法应用异步上下文。在完成单元测试之前,此异步上下文等待所有异步操作完成(包括async void
方法)。