3

dotCover 2.7 と xUnit.net 1.9.2 を使用しています。

私のマシン (Windows 7) と同僚のマシン (Windows 8) では、xUnit.net を使用するユニット テスト アセンブリの 1 つに対してコマンド ラインから 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" analyze /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>

この時点で、開発ボックスとビルド サーバーで異なる結果が得られる理由について困惑しているため、他に何を探すべきかについての提案をいただければ幸いです。

4

1 に答える 1

5

DotCover 開発者の 1 人の助けを借りて、最終的に問題を突き止めることができました。

DotCover では、分析中に PDB ファイルを使用できる必要があります。既定では、MSBuild<xunit...>タスク シャドウはアセンブリを別のフォルダーにコピーして、テストを実行します。これは明らかに PDB ファイルをコピーせず、アセンブリのみをコピーします。

この問題を解決するには、単にシャドウ コピーをオフにする必要がありました。

元の MSBuild タスク

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

MSBuild タスクを修正しました

<xunit Assembly="$(TrunkDir)\Ipseity.Server.Events.UnitTests.dll" ShadowCopy="False" />
于 2014-11-12T22:25:07.347 に答える