2011-12-21 7 views
0

У меня возникли проблемы с получением следующего для совместной работы.NCover 1.5.8 с родинками/Pex и NUnit

  • NCover 1.5.8 (версия поставляется с TestDriven.NET)
  • NUnit 2,5 (версия поставляется с TestDriven.NET)
  • Родинки и Pex

Я использую Windows, 7 x64 с тестовой библиотекой .NET 4.0 Pex и Moles

Я попытался следовать советам от this аналогичный вопрос (о получении Moles для работы с MSTest) и связанных с ним ссылках. Мне удалось заставить Moles и NUnit работать вместе благодаря this answer, но я не могу заставить его работать с NCover.

Вот пакетный файл.

:: Some paths 
:: ========== 
set NCoverPath=C:\Program Files (x86)\TestDriven.NET 3\NCover\1.5.8 
set NUnitPath=C:\Program Files (x86)\TestDriven.NET 3\NUnit\2.5 
set MolesPath=C:\Program Files\Microsoft Moles\bin 

:: Some environment variables 
:: ========================== 
:: (I've tried every combination I can think of here...) 
set ProfAPI_ProfilerCompatibilitySetting=EnableV2Profiler 
set COMPLUS_ProfAPI_ProfilerCompatibilitySetting=EnableV2Profiler 
set COR_PROFILER={3FB1CC1E-1C17-4A37-9C18-BF3DB8F10E46} 
set CLRMONITOR_EXTERNAL_PROFILERS={3FB1CC1E-1C17-4A37-9C18-BF3DB8F10E46} 
:: (Note 3FB1CC1E-1C17-4A37-9C18-BF3DB8F10E46 is the CLSID of NCoverLib.dll 1.5.8. 
:: Use {9721F7EB-5F92-447c-9F75-79278052B7BA} instead for NCover 3.x or later) 

:: Call NCover 
:: =========== 
:: Here is the main call to NCover/Moles.Runner/NUnit-Console 

"%NCoverPath%\ncover.console.exe"^
    //pm moles.runner.exe^
    //ea "moles.runner;mscorlib.Moles"^
    //reg^
    "%MolesPath%\moles.runner.exe" "Pex.Tests.dll"^
     /runner:"%NUnitPath%\NUnit-console.exe" 

И это выход я получаю:

NCover.Console v1.5.8 - Code Coverage Analysis for .NET - http://ncover.org 
Copyright (c) 2004-2006 Peter Waldschmidt 

Command: C:\Program Files\Microsoft Moles\bin\moles.runner.exe 
Command Args: ".\Pex.Tests.dll" "/runner:C:\Program Files (x86)\TestDriven.NET 3\NUnit\2.5\NUnit-console.exe" 
Working Directory: 
Assemblies: 
Coverage Xml: Coverage.Xml 
Coverage Log: Coverage.Log 

Waiting for profiled application to connect...Microsoft Moles Runner v0.94.51023.0 -- http://research.microsoft.com/moles -- .NET v4.0.30319 
Copyright (c) Microsoft Corporation 2007-2010. All rights reserved. 

instrumenting...started 
NUnit version 2.5.5.10112 
Copyright (C) 2002-2009 Charlie Poole. 
Copyright (C) 2002-2004 James W. Newkirk, Michael C. Two, Alexei A. Vorontsov. 
Copyright (C) 2000-2002 Philip Craig. 
All Rights Reserved. 

Runtime Environment - 
    OS Version: Microsoft Windows NT 6.1.7601 Service Pack 1 
    CLR Version: 4.0.30319.239 (Net 4.0) 

ProcessModel: Default DomainUsage: Single 
Execution Runtime: net-4.0 
................................. 
Tests run: 33, Errors: 0, Failures: 0, Inconclusive: 0, Time: 0 seconds 
    Not run: 0, Invalid: 0, Ignored: 0, Skipped: 0 

Connected 
Profiled process terminated. Profiler connection not established. 

возвращает код ошибки 1 и мои файлы покрытия содержат имена всех тестов, но с нулевым покрытием.

ответ

1

После долгих проб и ошибок я нашел комбинацию, которая работает.

  • Единственная среда установки необходимо является COMPLUS_ProfAPI_ProfilerCompatibilitySetting=EnableV2Profiler (установка любой из других упомянутых выше, будет вызывать NCover сбой)
  • Использование moles.runner.x86.exe (вместо moles.runner.exe), но использовать nunit-console.exe, а не (nunit-console-x86.exe)
  • You может дополнительно указать дополнительные аргументы для nunit, используя несколько параметров /args, например /args="/domain=None" /args="/xml:MyOutput.xml"
  • Не забудьте скопировать Microsoft.Moles.NUnit.dll в поддиректорию addins NUnit.

Ниже скорректированной пакетного файла

:: Some paths 
:: ========== 
set NCoverPath=C:\Program Files (x86)\TestDriven.NET 3\NCover\1.5.8 
set NUnitPath=C:\Program Files (x86)\TestDriven.NET 3\NUnit\2.5 
set MolesPath=C:\Program Files\Microsoft Moles\bin 
set PexPath=C:\Program Files\Microsoft Pex\bin 

:: Important! 
set COMPLUS_ProfAPI_ProfilerCompatibilitySetting=EnableV2Profiler 

:: Here is the main call to NCover/Moles.Runner/NUnit-Console 

"%NCoverPath%\ncover.console.exe"^
    //pm moles.runner.x86.exe^
    //ea "moles.runner;mscorlib.Moles"^
    //reg^
    "%MolesPath%\moles.runner.x86.exe" "Pex.Tests.dll"^
     /runner:"%NUnitPath%\NUnit-console.exe" 

Тесты запуска, код завершения равен нулю, а файлы покрытия генерируются.

На самом деле, если вам не нужны выходные файлы NUnit, вы можете сделать то же самое с pex.x86.exe следующим образом:

"%NCoverPath%\ncover.console.exe" 
    //pm pex.x86.exe 
    //ea "mscorlib.Moles" 
    //reg^
    "%PexPath%\pex.x86.exe" "%TestAssemblyPath%\Pex.Tests.dll" /nor /ftf 

Тесты запуска, код завершения равен нулю, а файлы покрытия генерируются.