2012-06-16 63 views
19

不确定这是一个已知问题。我使用VS2012 RC(Ultimate)和Win8 Release Preview。我创建了一个单元测试库(metro style app),并编写了一个单元测试,其中包含异步/等待关键字。但是,当我编译单元测试项目时,单元测试浏览器不显示我写的测试。如果我排除了异步/等待关键字,那么单元测试浏览器就出现在我刚写的测试中。有没有人遇到过这个,还是只是我?单元测试资源管理器不显示适用于metro应用程序的异步单元测试

[TestClass] 
public class UnitTest1 
{ 
    [TestMethod] 
    public async void SomeAsyncTest() 
    { 
     var result = await StorageFile.GetFileFromPathAsync("some file path"); 
    } 
} 
+1

如果你让方法返回一个'Task'会发生什么? – svick

+0

这很有趣。我想知道mstest是不正确地过滤类中的方​​法还是async关键字会改变签名,使得它不会通过反射出现。 – bryanbcook

+0

svick,你说得对。任务使其显示在UTE中。 – Spock

回答

28

单元测试方法是async必须返回Task,不void

这是因为async void方法很难跟踪:单元测试库找不到测试完成的简单方法。 (这很难,但我认为这不是不可能的,你可以通过使用自定义SynchronizationContext来做到这一点。)