2011-12-21 62 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和莫尔斯测试库

我试图从this类似的问题(关于让痣与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
  • 你可以通过使用多个/args参数来选择性地指定附加参数,例如,/args="/domain=None" /args="/xml:MyOutput.xml"
  • 不要忘记将Microsoft.Moles.NUnit.dll复制到NUnit的addins子目录。

请参阅以下修正批处理文件

:: 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" 

测试运行,该退出代码为0,并产生覆盖文件。

其实,如果你不需要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 

测试运行,该退出代码为0,并产生覆盖文件。