unit-testing - dotnet test Coverlet 错误覆盖
问题描述
我正在使用 docker、sonarqube、coverlet 构建 Jenkins 管道。Sonarqube 中显示的结果很奇怪。见下图,怎么可能覆盖构造函数内部的行但不覆盖方法签名?
还有很多额外奇怪的行为,比如不覆盖对象初始化:
上面的代码非常基本,它应该有 100% 的覆盖率,因为它是线性的,根本没有条件。
我的项目设置:
<PropertyGroup>
<TargetFramework>netcoreapp3.1</TargetFramework>
<IsPackable>false</IsPackable>
</PropertyGroup>
<ItemGroup>
<PackageReference Include="coverlet.msbuild" Version="3.0.0">
<PrivateAssets>all</PrivateAssets>
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
</PackageReference>
<PackageReference Include="Microsoft.AspNetCore.Http" Version="2.2.2" />
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="16.5.0" />
<PackageReference Include="xunit" Version="2.4.0" />
<PackageReference Include="xunit.runner.visualstudio" Version="2.4.0" />
<PackageReference Include="coverlet.collector" Version="3.0.0">
<PrivateAssets>all</PrivateAssets>
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
</PackageReference>
</ItemGroup>
Dockerfile 命令:
FROM mcr.microsoft.com/dotnet/core/sdk:3.1.405-focal AS build-env
RUN apt-get update && apt-get dist-upgrade -y && apt-get install -y openjdk-8-jre
COPY . ./
RUN dotnet restore MyProject.sln
RUN dotnet test MyProject.sln \
/p:CollectCoverage=true \
/p:CoverletOutputFormat=opencover
RUN dotnet tool install -g dotnet-sonarscanner
ENV PATH="${PATH}:/root/.dotnet/tools"
RUN export SONAR_SCANNER_OPTS="-Xmx1024m"
RUN dotnet sonarscanner begin /k:"ProjectKey" /n:"ProjectName" \
/d:sonar.host.url="http://10.100.3.176:9000" \
/d:sonar.verbose=true \
/d:sonar.login="somehash" \
/d:sonar.cs.opencover.reportsPaths="/tests/**/coverage.opencover.xml"
RUN dotnet build MyProject.sln
RUN dotnet sonarscanner end /d:sonar.login="somehash"
解决方案
今天遇到了同样的问题。显然,如果您的方法签名跨越多行,就会发生这种情况。正如评论部分中有人指出的那样,更新coverlet.msbuild
nuget 包以>=3.0.3
解决问题。
链接到 GitHub 问题 - https://github.com/coverlet-coverage/coverlet/issues/1037
推荐阅读
- rest - 如何设置每隔几秒使用一次的 .net core web-api 控制器
- ezapi - EZapi 中的 InteropServices.COMException
- pandas - 从另一个数据框 Pandas 更新数据框
- javascript - 前置标记作为 JSON 响应的一部分,导致位置 0 的 JSON 中出现意外的令牌 <
- typescript - 如何在没有“删除”运算符的操作数的情况下从 Typescript 中的对象中删除属性必须是可选错误?
- flutter - 颤振图表显示错误的 DateTimeAxis
- npm - NPM - 关于“电子邮件:(这是公开的)”的问题
- lua - 我的对象没有生成到 roblox studio 中的指定区域
- python - Python视频解码_without_ open-cv
- javascript - ZIndex 仅与 Android 中的任何 react-native-paper 组件重叠