【问题标题】:dotnet test Coverlet wrong coveragedotnet test Coverlet 错误覆盖
【发布时间】: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


【解决方案1】:

今天遇到了同样的问题。显然,如果您的方法签名跨越多行,就会发生这种情况。正如有人在 cmets 部分指出的那样,将coverlet.msbuild nuget 包更新为&gt;=3.0.3 可以解决问题。

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

【讨论】:

    猜你喜欢
    • 2021-06-13
    • 2020-03-30
    • 1970-01-01
    • 1970-01-01
    • 2020-10-05
    • 1970-01-01
    • 2013-08-23
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多