我们正在使用 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" 分析 /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>
在这一点上,我们对为什么我们在构建服务器上得到的结果与在我们的开发盒上得到不同的结果感到困惑,所以任何关于要寻找什么的建议都将不胜感激。