【问题标题】:Merge Code coverage for same DLL合并同一 DLL 的代码覆盖率
【发布时间】:2013-12-10 15:56:59
【问题描述】:

我正在处理由 MSTEST.EXE (Visula Studio 2010) 生成的代码覆盖率。 我在同一个 dll 上运行三种类型的测试,生成三个代码覆盖率文件。

  1. 起订量单元测试(作为门控签到运行)
  2. 集成单元测试(Jenkins 中的单独工作)
  3. GUI 单元测试(Jenkins 中的单独作业)

我想将文件中的所有三个代码覆盖率合并为一个,以便生成合并报告。 我尝试了以下代码。

Public Function JoinCoverageFiles(pcolCoverageFiles As List(Of String)) As CoverageInfo
        Dim lobjResultCoverageInfo As CoverageInfo = Nothing
        Console.WriteLine("Joining coverage file(s)...")
        Try
            For Each lstrCoverageFile As String In pcolCoverageFiles

                Dim lobjCurrentCoverageInfo As CoverageInfo = CoverageInfo.CreateFromFile(lstrCoverageFile)

                If lobjResultCoverageInfo Is Nothing Then
                    lobjResultCoverageInfo = lobjCurrentCoverageInfo
                    Continue For
                End If

                Dim lobjJoinedCoverageInfo As CoverageInfo = Nothing

                Try
                    lobjJoinedCoverageInfo = CoverageInfo.Join(lobjResultCoverageInfo, lobjCurrentCoverageInfo)
                Finally
                    lobjCurrentCoverageInfo.Dispose()
                    lobjResultCoverageInfo.Dispose()
                End Try

                lobjResultCoverageInfo = lobjJoinedCoverageInfo
            Next
        Catch generatedExceptionName As Exception
            If lobjResultCoverageInfo IsNot Nothing Then
                lobjResultCoverageInfo.Dispose()
            End If
            Throw
        End Try
        Console.WriteLine("Joining coverage file(s)... Done")
        Return lobjResultCoverageInfo
End Function

使用这段代码,我可以加入代码覆盖率文件,但我想要合并结果,以便了解在所有三个单元测试中哪些代码被覆盖和未被覆盖。

【问题讨论】:

  • 是的,Allen,但是这个博客没有提到合并代码覆盖结果。谢谢吉尔
  • 您能否详细说明您对合并的期望? CoverageInfo.MergeCoverageFiles api 确实合并了 .coverage 文件,只要您不更改各种测试运行中的 dll,它就可以很好地工作。
  • 感谢艾伦的“CoverageInfo.MergeCoverageFiles”,但我找不到任何相同的例子,所以我可以实现这个。

标签: mstest code-coverage


【解决方案1】:

您可以使用 CoverageInfo 类获取所有运行的合并覆盖率信息。

string ccFileMerged = Path.Combine(Path.GetTempFileName + ".coverage");
CoverageInfo.MergeCoverageFiles("A.coverage", "B.coverage", ccFileMerged);
// now you can use the ccFileMerged to get your merged data

但是您应该注意,合并将根据一些静态信息对 dll 进行分组,例如。 dll guid,每次构建都会重新生成。因此,只要您确保所有 .coverage 文件都是使用消耗 same dll 的运行生成的,那么合并将是无缝的。如果这些 dll 是每次运行生成的,您最终会在 .coverage 文件中看到每个唯一 dll 的 dll 条目

【讨论】:

  • 谢谢艾伦,我试过你的例子,比如 CoverageInfo.MergeCoverageFiles("D:\Test\MOQ\data.covrage", "D:\Test\SI\data.coverage", "c:\ both.coverage", True) 但获取 Coverage 文件 "D:\Test\MOQ\data.covrage" 无效或损坏。当我测试每个覆盖文件时,它给了我正确的结果,我的意思是两个覆盖文件都是有效的。
猜你喜欢
  • 1970-01-01
  • 2012-10-03
  • 1970-01-01
  • 2020-12-22
  • 2012-06-30
  • 1970-01-01
  • 2018-01-11
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多