正常运行时阻塞,但在单元测试期间没有阻塞(StoreAsync)

时间:2012-03-13 15:18:17

标签: c# .net windows-8 .net-4.5

我有一个问题,在单元测试期间,StoreAsync()方法返回。在没有调试的情况下运行时,即使它是异步方法,它似乎也永远不会返回。

是什么给出了?

   DataWriter writer = new DataWriter(_client.OutputStream);
   writer.WriteBytes(payload);
   await writer.StoreAsync(); // <--- returns only during unit test
   writer.DetachStream();

1 个答案:

答案 0 :(得分:0)

如果您使用的是VS 11 Beta,请确保您的单元测试声明为async Task

如果您使用的是VS 11 Dev Preview,请使用CodePlex中的Async Unit Tests project

我在博客上提供了有关异步单元测试的更多信息(part 1part 2)。总结:

  1. await需要(异步)等待时,它会安排一个延续并返回其调用者。
  2. MSTest看到测试方法返回,没有看到任何异常,并将其标记为“已通过”。
  3. 稍后,StoreAsync将完成,方法的其余部分将运行(在线程池线程上,而不是在该单元测试的上下文中)。
  4. VS 11 Beta为async Task单元测试方法增加了一流的支持。所以上面的第二步是不同的:MSTest看到测试方法返回,但知道在Task完成之前不会认为它已完成。

    异步单元测试项目采用不同的方法:它为[AsyncTestClass]中的每个单元测试方法应用异步上下文。在完成单元测试之前,此异步上下文等待所有异步操作完成(包括async void方法)。