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()。

thisthisを読みましたが、.testsetting ファイルがあるとこのエラーが発生する可能性があることを示しています。しかし、どちらも TFS/VS 2012 のベータ版用だと言っています。

また、コード カバレッジを有効にするには、テスト設定ファイルが必要です。

これは TFS 2012 だけのものですか? TFS 2010 ビルド エージェントは、これらを正しく実行するために VS 2012 を使用できませんか?

TFS 2012 にアップグレードせずにこれを機能させる方法はありますか? (そのアップグレードからまだ数か月あります)。

4

2 に答える 2

4

私のブログで説明したのと同様のアプローチを使用できます: 各単体テストのコードを でラップするだけです (私のAsyncEx NuGet ライブラリAsyncContext.Runから取得できます)。AsyncContext

于 2013-07-14T11:26:11.803 に答える
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
  }
}
于 2013-07-14T09:03:57.023 に答える