带Moles/Pex和NUnit的NCover 1.5.8 [英] NCover 1.5.8 with Moles/Pex and NUnit
问题描述
我无法让以下内容一起工作.
I'm having trouble getting the following to work together.
- NCover 1.5.8(TestDriven.NET附带的版本)
- NUnit 2.5(TestDriven.NET附带的版本)
- 痣和Pex
我正在将Windows 7 x64与.NET 4.0 Pex和Moles测试库一起使用
I'm using Windows 7 x64 with a .NET 4.0 Pex and Moles test library
我试图遵循这类似问题的提示(关于让Moles正常工作MSTest)和相关链接.感谢此答案,我确实设法让Moles和NUnit一起工作,但是我无法使其与NCover一起工作.
I have tried to follow tips from this similar question (about getting Moles to work with MSTest) and related links. I did manage to get Moles and NUnit to work together thanks to this answer, but I cannot get it to work with 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,我的覆盖率文件包含所有测试名称,但覆盖率却为零.
It returns error code 1 and my coverage files contain all the test names but with zero coverage.
推荐答案
经过反复尝试,我发现了一种有效的组合.
After much trial and error I found a combination which works.
- 唯一需要的环境设置是
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"
)为nunit指定其他args.
- 不要忘记将
Microsoft.Moles.NUnit.dll
复制到NUnit的addins子目录中.
- The only environment setting necessary is
COMPLUS_ProfAPI_ProfilerCompatibilitySetting=EnableV2Profiler
(setting any of the others mentioned above will cause NCover to fail) - Use
moles.runner.x86.exe
(instead ofmoles.runner.exe
), but usenunit-console.exe
, not (nunit-console-x86.exe
) - You can optionally specify additional args to nunit by using multiple
/args
parameters, e.g.,/args="/domain=None" /args="/xml:MyOutput.xml"
- Don't forget to copy
Microsoft.Moles.NUnit.dll
to the addins subdirectory of NUnit.
有关更正的批处理文件,请参见下文
See below for the corrected batch file
:: 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"
运行测试,退出代码为零,并生成coverage文件.
The tests run, the exit code is zero and the coverage files are generated.
实际上,如果不需要NUnit输出文件,则可以使用pex.x86.exe
进行以下操作:
Actually, if you don't need the NUnit output files, you can do the same with pex.x86.exe
as follows:
"%NCoverPath%\ncover.console.exe"
//pm pex.x86.exe
//ea "mscorlib.Moles"
//reg ^
"%PexPath%\pex.x86.exe" "%TestAssemblyPath%\Pex.Tests.dll" /nor /ftf
运行测试,退出代码为零,并生成coverage文件.
The tests run, the exit code is zero and the coverage files are generated.
这篇关于带Moles/Pex和NUnit的NCover 1.5.8的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!