NCover 1.5.8 с Кротами / Пексами и NUnit - PullRequest
0 голосов
/ 21 декабря 2011

У меня проблемы с получением следующего для совместной работы.

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

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

Я пытался следовать советам из этого аналогичного вопроса (о том, как заставить Молей работать с MSTest) и связанных ссылок. Мне удалось заставить Moles и NUnit работать вместе благодаря этому ответу , но я не могу заставить его работать с 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 Ответ

1 голос
/ 06 января 2012

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

  • Единственная необходимая настройка среды - COMPLUS_ProfAPI_ProfilerCompatibilitySetting=EnableV2Profiler (установка любой из других упомянутых выше причин приведет к сбою NCover)
  • Используйте moles.runner.x86.exe (вместо moles.runner.exe), но используйте nunit-console.exe, а не (nunit-console-x86.exe)
  • При желании можно указать дополнительные аргументы для объединения, используя несколько параметров /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

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

...