TFS 2012自定义生成工作流;未找到内部版本覆盖范围



在自定义TFS 2012工作流中,我使用以下代码片段:

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?"事务"中的生成和上面的代码是否在不可见正在进行的生成的情况下运行?任何帮助,不胜感激。

我不知道为什么(可能有很多原因),但在通过该接口构建工作流期间覆盖范围的可用性与工作流不同步。添加延迟环路

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

围绕这段代码可以确保构建覆盖范围数组的可用性(到目前为止,只需几秒钟)。

最新更新