2

我正在尝试使用 C# 单元测试 (MSTest2) 的构建管道生成代码覆盖率报告。可以使用 Reportgenerator.exe 生成报告,但需要 .xml 文件作为输入。我添加了 Visual Studio 测试任务,它在构建工件中生成了一个 .coverage 文件。我们可以使用 CodeCoverage.exe 将 .coverage 转换为 .xml 文件。

为了在本地进行测试,我复制了 .coverage 文件并运行:

C:\Program Files (x86)\Microsoft Visual Studio\2017\Enterprise\Team Tools\Dynamic Code Coverage Tools\amd64>CodeCoverage collect /IIS /session:WebSession /output:'C:\CoverageFiles\test.coverage'

C:\Program Files (x86)\Microsoft Visual Studio\2017\Enterprise\Team Tools\Dynamic Code Coverage Tools\amd64>CodeCoverage analyze /output:'c:\CoverageFiles\results.xml' 'c:\CoverageFiles\test.coverage'

该脚本没有抛出任何错误,也没有生成 xml 文件。

有没有其他方法可以从 .coverage 文件生成 .xml 文件?对此的任何帮助表示赞赏。

4

1 回答 1

0

您可以使用Coverlet创建不同格式的覆盖率报告。Coverlet 将由 msbuild 调用。您可以检查我的azure-pipelines.yml,我在其中使用 Coverlet 和 reporgenerator 在构建管道中创建代码覆盖率。

部分 yml:

- script: |
    echo $(Build.SourcesDirectory)
    cd src\Mwd.Exceptions.Solution
    mkdir $(Build.SourcesDirectory)\results
    dotnet test --logger trx /p:CollectCoverage=true /p:CoverletOutputFormat=cobertura  
    copy Mwd.Exceptions.Test\coverage.cobertura.xml $(Build.SourcesDirectory)\results
    dotnet tool install dotnet-reportgenerator-globaltool --tool-path . --version 4.0.0-rc4
    .\reportgenerator "-reports:$(Build.SourcesDirectory)\results\coverage.cobertura.xml" "-targetdir:$(Build.SourcesDirectory)\results" "-reporttypes:HTMLInline;HTMLChart"

dotnet test --logger trx /p:CollectCoverage=true /p:CoverletOutputFormat=cobertura以 cobertura 格式创建覆盖范围,当时唯一的格式构建管道支持。

.\reportgenerator "-reports:$(Build.SourcesDirectory)\results\coverage.cobertura.xml" "-targetdir:$(Build.SourcesDirectory)\results" "-reporttypes:HTMLInline;HTMLChart"生成报告。

由于coverlet将构建目标添加到 msbuild,因此还应该支持通过 devenv.exe 编译您的解决方案。

于 2019-05-12T16:24:38.483 回答