xunit.net - dotCover 和 xUnit 在某些环境中不收集覆盖率统计信息

标签 xunit.net dotcover

我们使用的是 dotCover 2.7 和 xUnit.net 1.9.2。

在我的机器 (Windows 7) 和同事的机器 (Windows 8) 上,我们可以从命令行针对我们使用 xUnit.net 的一个单元测试程序集运行 dotCover,并获得正确的覆盖率报告。

在我们的构建机器(Windows Server 2008 R2 Standard)上,当我们运行相同的东西时,dotCover 报告的唯一代码覆盖率是单元测试程序集本身。

我们正在使用 MSBuild 任务运行 xUnit.net。这是 .msbuild 文件中的相关部分。

<UsingTask TaskName="Xunit.Runner.MSBuild.xunit" AssemblyFile="$(PackagesDir)xunit.$(XunitVersion)\lib\net20\xunit.runner.msbuild.dll" />

<Target Name="XunitTests">
    <xunit Assembly="$(TrunkDir)src.UnitTests\Ipseity.Server.Events.UnitTests\bin\Debug\Ipseity.Server.Events.UnitTests.dll" />
</Target>

我们使用以下命令(每个环境中的相同命令)从命令行运行 dotCover。

"c:\Program Files (x86)\JetBrains\dotCover\v2.7\Bin\dotCover.exe" analyse /TargetExecutable="c:\Windows\Microsoft.NET\Framework64\v4.0.30319\MSBuild.exe" /TargetArguments="/t:XunitTests ipseity.msbuild" /TargetWorkingDir=c:\tfs\SI\ipseity\trunk\build /Output=c:\temp\coverage.xml

在 Windows 7 和 Windows 8 机器上,coverage.xml 文件包含以下内容。

<Root CoveredStatements="1977" TotalStatements="7867" CoveragePercent="25" ReportType="Xml" DotCoverVersion="2.7.2.176">
    <Assembly Name="Ipseity.Server.Common" CoveredStatements="4" TotalStatements="339" CoveragePercent="1">
        ...
    </Assembly>
    <Assembly Name="Ipseity.Server.Events" CoveredStatements="691" TotalStatements="798" CoveragePercent="87">
        ...
    </Assembly>
    <Assembly Name="Ipseity.Server.Events.UnitTests" CoveredStatements="1240" TotalStatements="1251" CoveragePercent="99">
        ...
    </Assembly>
    <Assembly Name="ipseity.Server.MessageProcessing" CoveredStatements="42" TotalStatements="5479" CoveragePercent="1">
        ...
    </Assembly>
</Root>

但是在构建服务器(Windows Server 2008 R2 Standard)上,我们只得到单元测试程序集显示在覆盖率报告中。

<Root CoveredStatements="1033" TotalStatements="1039" CoveragePercent="99" ReportType="Xml" DotCoverVersion="2.7.2.176">
    <Assembly Name="Ipseity.Server.Events.UnitTests" CoveredStatements="1033" TotalStatements="1039" CoveragePercent="99">
        ...
    </Assembly>
</Root>

在这一点上,我们对为什么我们在构建服务器上得到的结果与在我们的开发箱上得到的结果不同感到困惑,因此我们将不胜感激任何关于寻找其他内容的建议。

最佳答案

在一位 DotCover 开发人员的帮助下,我们终于能够找出问题所在。

DotCover 要求 PDB 文件在分析期间可用。默认情况下 MSBuild <xunit...> task shadow 将程序集复制到另一个文件夹中以运行测试。这显然复制 PDB 文件,只复制程序集。

因此,为了解决这个问题,我们只需关闭卷影复制即可。

原始 MSBuild 任务

<xunit Assembly="$(TrunkDir)\Ipseity.Server.Events.UnitTests.dll" />

修复了 MSBuild 任务

<xunit Assembly="$(TrunkDir)\Ipseity.Server.Events.UnitTests.dll" ShadowCopy="False" />

关于xunit.net - dotCover 和 xUnit 在某些环境中不收集覆盖率统计信息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25855131/

相关文章:

c# - xUnit 和 Moq 不支持 async - await 关键字

.net - TeamCity 中代码覆盖率的属性过滤器语法

iis - 使用 dotCover 命令行的 IIS 代码覆盖率

c# - Dotcover 代码覆盖率 : Getting empty results from command line

c# - 如何配置 xUnit 测试以与 NLog 一起使用?

c# - 具有参数化单元测试的 .NET 测试框架,每个组合都显示红色/绿色?

asp.net - 无法让 ConfigurationBuilder 从 ASP.NET Core 1.0 RC2 中的 xunit 类库中的 appsettings.json 读取

c# - 串行执行单元测试(而不是并行)

unit-testing - 从 TeamCity 运行时 dotCover 统计信息出错