【问题标题】:NCover 1.5.8 with Moles/Pex and NUnit带有 Moles/Pex 和 NUnit 的 NCover 1.5.8
【发布时间】:2011-12-21 16:52:21
【问题描述】:

我无法让以下各项协同工作。

  • NCover 1.5.8(TestDriven.NET 附带的版本)
  • NUnit 2.5(TestDriven.NET 附带的版本)
  • 痣和 Pex

我正在使用带有 .NET 4.0 Pex 和 Moles 测试库的 Windows 7 x64

我已尝试遵循 this 类似问题(关于让 Moles 与 MSTest 一起工作)和相关链接的提示。感谢this answer,我确实设法让 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,我的覆盖率文件包含所有测试名称,但覆盖率为零。

【问题讨论】:

    标签: nunit moles pex ncover


    【解决方案1】:

    经过多次尝试和错误,我找到了一个有效的组合。

    • 唯一需要的环境设置是COMPLUS_ProfAPI_ProfilerCompatibilitySetting=EnableV2Profiler(设置上面提到的任何其他环境都会导致NCover失败)
    • 使用moles.runner.x86.exe(而不是moles.runner.exe),但使用nunit-console.exe,而不是(nunit-console-x86.exe
    • 您可以选择使用多个/args 参数为nunit 指定其他参数,例如/args="/domain=None" /args="/xml:MyOutput.xml"
    • 不要忘记将Microsoft.Moles.NUnit.dll 复制到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
    

    测试运行,退出代码为零并生成覆盖文件。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2010-12-06
      • 1970-01-01
      • 1970-01-01
      • 2012-01-14
      • 1970-01-01
      • 2011-08-24
      • 2011-09-10
      • 2012-11-12
      相关资源
      最近更新 更多