2012-09-10 133 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()) 

解決此代碼保證(迄今爲止在幾秒鐘內)構建覆蓋範圍陣列的可用性。

相關問題