2010-11-13 27 views
2

所以我有一些代碼,可以讀取方法出.coverage文件...編程雷丁VS .coveragexml文件在C#

using (CoverageInfo info = CoverageInfo.CreateFromFile(this.myCoverageFile)) 
{ 

    CoverageDS ds = info.BuildDataSet(); 

    foreach (ICoverageModule coverageModule in info.Modules) 
    { 
     CodeModule currentModule = new CodeModule(coverageModule.Name); 
     byte[] coverageBuffer = coverageModule.GetCoverageBuffer(null); 

     using (ISymbolReader reader = coverageModule.Symbols.CreateReader()) 
     { 
      Method currentMethod; 
      while (reader.GetNextMethod(out currentMethod, coverageBuffer)) 
      { 
       if (currentMethod != null) 
       { 
        currentModule.Methods.Add(currentMethod); 
       } 
      } 
     } 

     returnModules.Add(currentModule); 
    } 
} 

...但我希望能夠讀取.coverage也被導出到xml的文件。原因是.coverage文件要求源代碼文件處於測量代碼覆蓋率時的確切位置,這對我不起作用。

當我嘗試使用CreateFromFile(string)加載coveragexml文件時,出現以下異常。

Microsoft.VisualStudio.Coverage.Analysis.InvalidCoverageFileException 了未處理消息=覆蓋文件 「unittestcoverage.coveragexml」 是 無效或損壞。

在Visual Studio中打開coveragexml文件就好了,所以我不認爲這個文件的格式有問題。

我知道CoverageDS可以導入XML文件,但API小於直觀,我能找到它的使用的唯一的例子是...

using(CoverageInfo info = CoverageInfo.CreateFromFile(fileString)) 
{ 
    CoverageDS data = info.BuildDataSet(); 
    data.ExportXml(xmlFile); 
} 

...這告訴我一無所知如何真正從該文件中讀取覆蓋率數據。

有人知道如何從.coveragexml文件處理代碼覆蓋率數據嗎?

+1

對於未來的讀者:下面的URL有一個「線索」。 「要將二進制VSTest.Console輸出轉換爲Microsoft CoverageDS XML格式,您可以使用以下V0.14發行說明中引用的預建應用程序之一,或者您可以構建以下轉換器應用程序:」I ~~ think ~~ 「CoverageInfo.CreateFromFile」用於從***二進制文件***(來自VSTest.Console)加載,而不是trx文件(只是xml)。請參閱:https://wiki.jenkins-ci.org/display/JENKINS/MSTest+Plugin什麼讓我是我不知道(德哦)trx文件只是xml。 :( – granadaCoder 2016-04-29 14:12:28

回答

3

也許可以通過編程操作代碼覆蓋率信息的最佳介紹是here,也可以在鏈接的ms_joc博客中找到。

我敢肯定你可以使用'CreateInfoFromFile'與.coverage文件或上面示例中導出的XML文件。

更新: 如果coveragexml作爲參數傳遞,CreateInfoFromFile將引發異常。這是一個替代方案:

CoverageDS dataSet = new CoverageDS(); 
dataSet.ImportXml(@"c:\temp\test.coveragexml"); 

foreach (CoverageDSPriv.ModuleRow module in dataSet.Module) 
{ 
    Console.WriteLine(String.Format("{0} Covered: {1} Not Covered: {2}", module.ModuleName, module.LinesCovered, module.LinesNotCovered)); 
} 
+0

是的,我已經看到了你提到的那個確切的博客,並且我發現它是最好的,最有用的。如果你將它傳遞給導出的xml文件,CreateInfoFromFile似乎會拋出異常(這是我嘗試的第一件事情之一)我將用它更新問題 – user467384 2010-11-13 15:57:51

+0

用不同的方法更新 – 2010-11-13 17:35:05

+0

這正是我想要的,我設法使用DataSet接口提取數據,但這樣好多了。 – user467384 2010-11-15 18:35:43

0

您是否嘗試過CoverageDS.ReadXml(fileName_string)方法?