2013-01-11 102 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每個單元測試代碼(你可以從我得到)。