2012-09-10 90 views
0

在自定义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,发布构建完成?是否构建在“事务”中,并且上面的代码在正在运行的构建中不可见?最受赞赏的任何帮助。

回答

0

我不知道为什么(有可能是一个原因,无数的),但覆盖面通过此接口不与工作流同步的构建工作流程中的可用性。添加延迟环路

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

解决此代码保证(迄今为止在几秒钟内)构建覆盖范围阵列的可用性。

相关问题