2013-01-11 63 views
3

我正在编写一个应用程序,该应用程序使用异步库以VS 2012为目标编写。使用TFS 2010运行异步任务单元测试

我的自动生成在安装了VS 2012和.NET 4.5的TFS 2010生成代理上运行。

我到处读到如果你的单元测试是异步的,它必须有async Task TestMethod()签名(而不是async void TestMethod())。

然而,当我这样做,我的构建服务器给了我这个错误是方法:

标有[TestMethod的]属性必须是非静态的,公共的测试方法,并没有返回值,应不采取任何参数。例如:public void Test.Class1.Test()。

我已阅读并thisthis表明,如果你有一个.testsetting文件时,它可能会导致这个错误。但这两个人都说他们是TFS/VS 2012的测试版。

另外,我需要测试设置文件来打开代码覆盖率。

这是TFS 2012唯一的东西吗? TFS 2010 Build Agent能否使用VS 2012来正确运行这些代码?

有什么办法可以在不升级到TFS 2012的情况下做到这一点?(我们距离升级还有几个月)。

+0

我不认为2010版的MsTest完全理解这些类型的测试。我预计TFS 2010将使用2010版的MsTest(这样做有点硬连线)。您可以更改工作流以明确使用新的VS2012测试框架,但这可能需要相当多的修补才能真正起作用。 – jessehouwing

回答

1

我有同样的问题,我有一个丑陋的解决方法解决它那是构建服务器(只,直到您升级到TFS 2012)

[TestMethod] 
public void TestMethod() 
{ 
    //TODO: fix this after upgrade to TFS2012 build server 
    var task = TestMethodInnerMethod(); 
    task.Wait(); 
} 

private async Task TestMethodInnerMethod() 
{ 
    //Arrange 

    //Act 
    await Provider.StartAsync(); 

    //Assert 
} 

更新的作品:更好的解决方案,使用http://nuget.org/packages/Nito.AsyncEx/与包裹AsyncContext.Run(...)

[TestMethod] 
public void TestMethod() 
{ 
    //TODO: fix this after upgrade to TFS2012 build server 
    AsyncContext.Run(async() => 
    { 
    //Arrange 

    //Act 
    await Provider.StartAsync(); 

    //Assert 
    } 
} 
4

可以使用类似的方法来什么,我描述on my blog:只是包装在AsyncContext.Run每个单元测试代码(你可以从我得到)。