我们使用coverlets (https://github.com/tonerdo/coverlet)来度量包含多个项目的.NET解决方案中单元测试的代码覆盖率。结果将分别显示在解决方案中的每个项目中。我们想要的是整个解决方案的统一结果。有没有人能建议一下最好的方法呢?如果coverlet不可能做到这一点,您可以建议使用CLI的其他开源工具来实现这一点吗?我们基本上需要将其与CI工具集成,如果覆盖率低于阈值,该工具应发出警告。
发布于 2019-05-24 02:34:04
这就是我们使用coverlet.msbuild为整个解决方案生成代码覆盖率的方式。
解决方案中每个测试项目中的
coverlet.msbuild。dotnet test {solution_filename.sln} --logger:trx --results-directory ../TestResults \
"/p:CollectCoverage=true" \
"/p:CoverletOutput=../TestResults/" \
"/p:MergeWith=../TestResults/coverlet.json" \
"/p:CoverletOutputFormat=\"json,cobertura\"" 如果在Windows上运行,您可能需要转义传递给这些参数的一些字符,例如逗号(%2c)。
为了跨多个项目合并结果,我们生成了两种输出格式: json和cobertura。请参见参数/p:CoverletOutputFormat。
在为每个项目生成代码覆盖率时,coverlet将使用/p:MergeWith将当前项目的coverlet.json与以前的coverlet.json合并。
这种方法为解决方案生成了一个cobertura结果文件,我们可以在稍后的CI构建中使用该文件。
发布于 2021-01-24 13:34:24
如果您使用的是coverage.collector,它将为每个项目生成单独的测试结果文件。
然后,您可以使用reportgenerator工具将多个结果合并为一个。
下面是我们在CI中如何做到这一点:
dotnet test <solution-file> --collect:"XPlat Code Coverage"
dotnet tool install --global dotnet-reportgenerator-globaltool --version <version-number>
reportgenerator -reports:<base-directory>/**/coverage.cobertura.xml -targetdir:<output-directory>/CoverageReport -reporttypes:Cobertura这将为您的所有测试项目生成一个组合报告。
发布于 2021-03-21 08:17:47
最近我遇到了同样的问题,Joel answer工作得很好。除非您需要xml而不是json。在这种情况下,您必须一个接一个地运行测试项目,生成json输出并与前一个合并,但以您需要的格式运行最后一个。
下面是我如何做到这一点的一个例子:
RUN dotnet test "tests/[project name].Test.Integration/[project name].Test.Integration.csproj" \
--configuration Release \
--no-restore \
--no-build \
--verbosity=minimal \
-p:CollectCoverage=true \
-p:CoverletOutputFormat="json" \
-p:CoverletOutput=/src/cover.json
RUN dotnet test "tests/[project name].Test.Unit/[project name].Test.Unit.csproj" \
--configuration Release \
--no-restore \
--no-build \
--verbosity=minimal \
-p:CollectCoverage=true \
-p:CoverletOutputFormat="opencover" \
-p:CoverletOutput=/src/cover.xml \
-p:MergeWith=../../cover.json我在Docker中运行它,我的文件夹结构可能看起来有点混乱=)。这里是,为了避免任何混淆:
src
---src
---tests
------[project name].Test.Integration
---------[project name].Test.Integration.csproj
------[project name].Test.Unit
---------[project name].Test.Unit.csproj
---[project name].sln
---cover.json <- this file gets created after the first command
---cover.xml <- this file gets created after the second command因此,我首先为我的集成测试运行覆盖率,然后以所需的格式将其与单元测试覆盖率合并(开放覆盖率,因为我需要它用于SonarQube)
https://stackoverflow.com/questions/53255065
复制相似问题