Сбой тестов NUnit в OpenCover

Мои тесты отлично работают при выполнении непосредственно с помощью NUnit, но при выполнении через OpenCover (все еще с NUnit в качестве средства запуска тестов) я получаю следующие ошибки:

ProcessModel: Default    DomainUsage: Single
Execution Runtime: Default

.F.F.F.F.F.F.F.F.F.F.F.F.F.F.F.F.F.F.F.F.F.F.F.F.F.F.F.F.F.F.F.F.F.F.F.F.F.F.F.F.F.F.F.F.F.F.F.F.F.F.F.F.F.F.F.F.F.F.F.F
.F.F.F.F.F.F.F.F.F.F.F.F.F.F.F.F.F.F.F.F.F.F.F.F.F.F.F.F.F.F.F.F.F.F.F.F.F.F.F.F.F.F.F.F.F. F.F.F.F.F.F.F.F.F.F.F.F.F.F.F
.F.F.F.F.F.F.F.F.F.F.F.F.F.F.F.F.F.F.F.F.F.F.F.F.F.F.F.F.F.F.F.F.F.F.F.F.F.F.F.F.F.F.F.F.F.F.F.F.F.F.F.F.F.F.F.F.F.F.F.F
.F.F.F.F.F.F.F.F.F.F.F.F.F.F.F.F.F.F.F.F
Tests run: 200, Errors: 0, Failures: 200, Inconclusive: 0, Time: 0,5410309 seconds
   Not run: 0, Invalid: 0, Ignored: 0, Skipped: 0

Errors and Failures:
1) SetUp Error : GeoGen.Studio.PlugInLoader.LoaderTests
   SetUp : System.MissingMethodException : Method not found: 'VoidSystem.CannotUnloadAppDomainException.SafeVisited(Int32)'.
       at GeoGen.Studio.PlugInLoader.LoaderTests..ctor()

2) Parent Failure : GeoGen.Studio.PlugInLoader.LoaderTests.AddPlugIn_ValidPlugIn_CreatesInstance
   TestFixtureSetUp failed in LoaderTests

Ошибка 2 повторяется для каждого теста. Все тесты должны пройти (и они проходят в NUnit). Покрытие корректно работало с NCover, но его пробный период истек, и я не могу позволить себе лицензию.

Спасибо за вашу помощь!


person Matěj Zábský    schedule 07.03.2012    source источник
comment
Это похоже на ошибку OpenCover — он не может найти внедренные методы, которые он использует для инструментовки — пожалуйста, поднимите вопрос на github-opencover и, если возможно, простой повторяемый тест.   -  person Shaun Wilde    schedule 08.03.2012
comment
Я нашел код в коде Google, но нет тестов. Могу ли я поэкспериментировать с этим проектом?   -  person Shaun Wilde    schedule 09.03.2012


Ответы (2)


У меня была та же проблема - кажется, вы разместили проблему на github, которая помогла мне решить это, поэтому я размещаю его здесь для всех, у кого есть такая же проблема:

Я решил проблему, обновив до последней версии OpenCover (на данный момент 4.0.804) и добавив переключатель -oldStyle, когда я вызывал OpenCover. Также кажется, что последний OpenCover выдавал что-то, что ReportGenerator не нравилось, поэтому мне пришлось обновить и его.

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

person Grokys    schedule 19.09.2012
comment
Да, я добавил переключатель -oldStyle в ответ на этот вопрос. Для большинства людей не будет заметной разницы, если у вас нет атрибута AllowPartiallyTrustedCallersAttribute. Если кто-нибудь может помочь мне воспроизвести проблему (даже на виртуальной машине), это будет большим подспорьем. - person Shaun Wilde; 20.09.2012
comment
@ShaunWilde: я посмотрю, есть ли какая-нибудь виртуальная машина, которую я мог бы достать для вас. Не уверен, что смогу, так как, к сожалению, это все рабочие вещи... - person Grokys; 20.09.2012
comment
Я понимаю, что мне никогда не удавалось воспроизвести проблему, которую вы все видите, и, к сожалению, у меня нет бюджета на поездку - OSS плохо платит :) - person Shaun Wilde; 20.09.2012

Я не могу сказать, используете ли вы NUnit в качестве средства запуска тестов или нет для OpenCover. Ниже приведен пакетный файл, который я использую для запуска OpenCover с NUnit в качестве средства запуска теста. Я использую ReportGenerator, чтобы получить красивую веб-страницу со всей статистикой охвата. Вы можете найти это полезным, так как вы сказали, что ваши тесты отлично работают с бегуном NUnit:

set buildOutputFolder=.\build-output
set testDllFolder=\projects\YourProject.Test\bin\Debug
set testDllName=YourProject.Test
set targetDllFilters=+[YourProject*]* -[YourProject.Test*]*

del %buildOutputFolder%\*.*
REM I use a symbolic link to point to a single folder for these tools.
REM Create the link by:
REM mklink /D OClib c:\packages\OpenCover.1.0.719
REM mklink /D RptGen c:\packages\ReportGenerator.1.2.1.0
REM mklink /D NUnitLib c:\packages\NUnit-2.5.10.11092\bin\net-2.0

OClib\OpenCover\OpenCover.Console.exe -register:user -target:"NUnitLib\nunit-console.exe" -targetargs:"/noshadow %testDllFolder%\%testDllName%.dll" -filter:"%targetDllFilters%" -output:"%buildOutputFolder%\CoverageResult.xml"
del TestResult.xml

RptGen\ReportGenerator\ReportGenerator %buildOutputFolder%\CoverageResult.xml %buildOutputFolder%
%buildOutputFolder%\index.htm
person Sixto Saez    schedule 07.03.2012
comment
Да, я использую NUnit в качестве средства запуска тестов в OpenCover. Я не вижу никакой реальной разницы между вашим кодом и моим (хотя я еще не дошел до этапа отчета). - person Matěj Zábský; 08.03.2012