【发布时间】:2021-04-19 14:35:41
【问题描述】:
我正在使用 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"
【问题讨论】:
-
您是否检查了覆盖结果本身?也许这只是在 sonarqube 中显示结果的问题?
-
不,我没有。但是我发现了一些最近的相关问题:github.com/coverlet-coverage/coverlet/issues/1037... 我想我可能会关闭这个问题。
-
这只是coverlet.msbuild 3.0.0中的一个错误。
标签: unit-testing .net-core sonarqube dockerfile