3

我正在编写一个使用 Async 库以 .NET 4.0 为目标的 VS 2012 编写的应用程序。

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

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

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

用 [TestMethod] 属性标记的测试方法必须是非静态的、公共的、不返回值且不应带任何参数。例如:public void Test.Class1.Test()。

我已阅读内容,表明如果您有 .testsetting 文件,则可能会导致此错误。但两者都表示它们适用于 TFS/VS 2012 的 beta 版本。

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

这是 TFS 2012 唯一的事情吗?TFS 2010 Build 代理不能使用 VS 2012 来正确运行这些吗?

有没有办法在不升级到 TFS 2012 的情况下完成这项工作?(我们距离升级还有几个月的时间)。

4

2 回答 2

4

您可以使用类似于我在博客中描述的方法:只需将每个单元测试的代码包装在一个AsyncContext.Run(您可以AsyncContext从我的AsyncEx NuGet 库中获取)。

于 2013-07-14T11:26:11.803 回答
1

I had the same problem, I solved it with a ugly workaround thats works on the build server (just until you upgrade to 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
}

Update: Even better solution, use http://nuget.org/packages/Nito.AsyncEx/ and wrap with AsyncContext.Run(...)

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

    //Act
    await Provider.StartAsync();

    //Assert
  }
}
于 2013-07-14T09:03:57.023 回答