0

カスタムTFS2012ワークフローでは、次のコードスニペットを使用しています。

IBuildDetail buildDetail = context.GetValue(BuildDetail);
var testManagementService = TfsTeamProjectCollectionFactory
                .GetTeamProjectCollection(new Uri("http://tfs:8080/tfs/Sandbox"))
                .GetService<ITestManagementService>();

var buildCoverages = testManagementService
                .GetTeamProject(buildDetail.TeamProject)
                .CoverageAnalysisManager
                .QueryBuildCoverage(buildDetail.Uri.ToString(), CoverageQueryFlags.Modules);

コードカバレッジはビルドで正しく実行されており、ビルドの「ビルドの概要」には次のものが含まれています。

> 2 binaries instrumented - 89% of all code blocks covered
    fooTests.dll - 99% of 479 code blocks covered
    foo.exe - 74% of 347 code blocks covered

テストの目的で、カスタムアクティビティは、「ゲート変更のチェックイン」後のワークフローの最後のアクティビティです。ビルド中、buildCoverages変数には長さ0の配列が含まれます。なぜこれなのか分かりますか?カバレッジ結果は非同期でTFSに送信され、ビルドの完了後に送信されますか?「トランザクション」のビルドと上記のコードは、進行中のビルドを表示せずに動作していますか?どんな助けでも大歓迎です。

4

1 に答える 1

0

理由はわかりませんが(理由は無数にある可能性があります)、このインターフェイスを介したビルドワークフロー中のカバレッジの可用性は、ワークフローと同期していません。遅延ループの追加

do
{
    buildCoverages = testManagementService
            .GetTeamProject(buildDetail.TeamProject)
            .CoverageAnalysisManager
            .QueryBuildCoverage(buildDetail.Uri.ToString(), CoverageQueryFlags.Modules);
} while(buildCoverages.Length == 0 && retryDelay())

このコードの周りで、ビルドカバレッジアレイの可用性が(これまでのところ数秒以内に)保証されます。

于 2012-09-11T21:49:36.610 に答える