dotCover и xUnit не собирают статистику покрытия в некоторых средах

Мы используем dotCover 2.7 и xUnit.net 1.9.2.

На моей машине (Windows 7) и машине коллеги (Windows 8) мы можем запустить dotCover из командной строки для одной из наших сборок модульного тестирования, которая использует xUnit.net, и получить правильные отчеты о покрытии.

На нашей машине сборки (Windows Server 2008 R2 Standard), когда мы запускаем одно и то же, единственное покрытие кода, о котором сообщает dotCover, - это сама сборка модульного теста.

Мы запускаем xUnit.net с помощью задачи MSBuild. Вот соответствующие фрагменты из файла .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 файл extension.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>

На данный момент мы не понимаем, почему мы получаем разные результаты на сервере сборки, чем на наших ящиках для разработчиков, поэтому мы будем благодарны за любые предложения относительно того, что еще искать.


person Craig W.    schedule 15.09.2014    source источник


Ответы (1)


С помощью одного из разработчиков DotCover мы наконец-то смогли разобраться в проблеме.

DotCover требует, чтобы файлы PDB были доступны во время анализа. По умолчанию задача MSBuild <xunit...> shadow копирует сборки в другую папку для запуска тестов. Очевидно, это не копирует файлы PDB, а только сборки.

Поэтому, чтобы решить эту проблему, нам просто пришлось отключить теневое копирование.

Исходная задача MSBuild

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

Исправленная задача MSBuild

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