首页 > 解决方案 > 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"

标签: unit-testing.net-coresonarqubedockerfile

解决方案


今天遇到了同样的问题。显然,如果您的方法签名跨越多行,就会发生这种情况。正如评论部分中有人指出的那样,更新coverlet.msbuildnuget 包以>=3.0.3解决问题。

链接到 GitHub 问题 - https://github.com/coverlet-coverage/coverlet/issues/1037


推荐阅读