Nunit 试着用痣来对付努尼特。获得;Moles要求测试为仪器化过程”;

Nunit 试着用痣来对付努尼特。获得;Moles要求测试为仪器化过程”;,nunit,moles,Nunit,Moles,我尝试使用NUnit的moles,并得到以下错误“moles要求测试是一个仪器化的过程”。我还在VisualStudio2008中使用VisualNunit来实现这一点。欢迎提供任何帮助。您不能在Visual Studio中使用NUnit运行MS Moles。您必须使用MSTest(Visual Studio单元测试)来执行此操作,或者可以从命令行使用MOLE运行NUnit测试。请参阅 一个可能的选择:如果它适合您的需要,您可以使用自动化平台并行运行各种测试框架(在您的情况下是NUnit和MST

我尝试使用NUnit的moles,并得到以下错误“moles要求测试是一个仪器化的过程”。我还在VisualStudio2008中使用VisualNunit来实现这一点。欢迎提供任何帮助。

您不能在Visual Studio中使用NUnit运行MS Moles。您必须使用MSTest(Visual Studio单元测试)来执行此操作,或者可以从命令行使用MOLE运行NUnit测试。请参阅

一个可能的选择:如果它适合您的需要,您可以使用自动化平台并行运行各种测试框架(在您的情况下是NUnit和MSTest)

嗯!
托马斯

我使用的是摩尔版本0.94.51023.0

据我所知,您需要在测试方法中添加以下属性。我正在使用VisualStudio测试框架,不确定它是否与NUnit等相同

[HostType("Moles")]
我还读到,您可以将
[Moles]
属性添加到测试方法中,但这对我来说是不可用的,我没有说明原因,假设它是旧文档——Moles似乎有很多

更新:根据Moles参考手册第26页,试验方法上的MoledAttribute是NUnit的方法。您必须将Microsoft.Moles.NUnit.dll程序集复制到NUnitbin/addins文件夹,从而向NUnit注册该程序集

然后将
[Moled]
属性添加到测试方法中

[Test]
[Moled]
public void MyTest() {
  ...
}
否则,您将添加一个using块来包装测试方法,如下所示:

[Test]
public void MyTest() {
  using (MolesContext()) {
  ...
  }
}

除了添加[HostType(“Moles”)]属性外,还需要使用Moles runner包装测试运行程序。例如:

moles.runner.exe MyAssembly.dll /r:nunit-console.exe
Moles runner可能位于C:\Program Files\Microsoft Moles\bin中。对于用法,请执行:

moles.runner.exe help

这就是我为了让鼹鼠和努伊特一起工作所做的:

  • 抓取
    C:\ProgramFiles(x86)\Microsoft Moles\Documentation\Moles.samples.zip上的存档文件,然后解压缩
    Moles
    解决方案文件夹

  • 在VisualStudio(2008)中构建
    NUnit
    项目以供发布

  • 将输出文件
    Microsoft.Moles.NUnit.dll
    Microsoft.Moles.NUnit.xml
    ..\Moles\NUnit\bin\Release\
    复制到
    C:\Program files(x86)\NUnit 2.5.9\bin\net-2.0\addins\
    。我怀疑这一步重新编译NUnit加载项而不是使用下载和安装中的加载项才是真正的解决办法

  • 在VS测试项目中,确保添加对刚刚复制的
    C:\ProgramFiles(x86)\NUnit 2.5.9\bin\net-2.0\addins\Microsoft.Moles.NUnit.dll
    的引用

  • 在VS测试类中,使用
    [Moled]
    属性标记测试方法(这将需要使用Microsoft.Moles.Framework.NUnit的
    )。或者,使用(MolesContext.Create()){…}
    块将其实现包装在
    中(这将需要使用Microsoft.Moles.Framework

  • 从命令行,通过moles runner调用NUnit test runner,方法如下:
    “C:\Program Files(x86)\Microsoft moles\bin\moles.runner.exe”“path\to\your\test\assembly.dll”/r:“C:\Program Files(x86)\NUnit 2.5.9\bin\net-2.0\NUnit console.exe”/x86/args:“/domain=None”

  • 我发现[Moled]属性与[TestCase(…)不兼容,它将您带回未指令错误场景。相反,使用(MolesContext.Create())
    块的
    在这种情况下也可以工作

    一旦发现一切都有效,你可以考虑运行MysRunes作为VisualStudio中的外部工具。按照中的说明,按照步骤6更新参数


    请注意,这是在Windows 7 64位计算机上,NUnit 2.5.9、Microsoft Pex和Moles(x86)0.94.51006.1。考虑不同路径、版本等的实际文件夹,

    SujJOS有最正确的答案,并使用“连续测试”Advin,可以让VisualStudio通过这个批处理文件运行Munes转发器通过NUnver控制台运行器:

    @echo off
    
    rem Uses the Microsoft Moles runner and fires off the NUnit console runner so you can use Moles with NUnit.
    rem This batch file is intended to be run from the Continuous Testing plugin in Visual Studio.
    rem However, it can be used to run nunit tests from anyhere with Moles as long as the first parameter
    rem is the assembly to be tested.  All other parameters are passed to NUnit.
    
    set ASSEMBLY=%1
    set MOLESPATH="c:\Program Files\Microsoft Moles\bin\moles.runner.exe"
    set NUNITPATH="C:\Program Files\NUnit 2.5.10\bin\net-2.0\nunit-console.exe"
    shift
    
    if [%ASSEMBLY%]==[] goto HelpScreen
    if [%1]==[] goto RunAlone
    if [%2]==[] goto RunParams1 
    if [%3]==[] goto RunParams2 
    if [%4]==[] goto RunParams3 
    if [%5]==[] goto RunParams4 
    if [%6]==[] goto RunParams5 
    if [%7]==[] goto RunParams6 
    if [%8]==[] goto RunParams7 
    if [%9]==[] goto RunParams8 
    goto RunParams9
    :HelpScreen
    echo "The parameters are the same as NUnit Console runner with the exception that:
    echo "   1) Only one assembly is supported and it must come first"
    echo "   2) Only 9 extra parameters may be specified"
    echo
    %NUNITPATH% /?
    exit 1
    :RunAlone
    %MOLESPATH% /r:%NUNITPATH% %ASSEMBLY%
    goto ExitRunner
    :RunParams1
    %MOLESPATH% /r:%NUNITPATH% %ASSEMBLY% /args:%1
    goto ExitRunner
    :RunParams2
    %MOLESPATH% /r:%NUNITPATH% %ASSEMBLY% /args:%1 /args:%2
    goto ExitRunner
    :RunParams3
    %MOLESPATH% /r:%NUNITPATH% %ASSEMBLY% /args:%1 /args:%2 /args:%3
    goto ExitRunner
    :RunParams4
    %MOLESPATH% /r:%NUNITPATH% %ASSEMBLY% /args:%1 /args:%2 /args:%3 /args:%4
    goto ExitRunner
    :RunParams5
    %MOLESPATH% /r:%NUNITPATH% %ASSEMBLY% /args:%1 /args:%2 /args:%3 /args:%4 /args:%5
    goto ExitRunner
    :RunParams6
    %MOLESPATH% /r:%NUNITPATH% %ASSEMBLY% /args:%1 /args:%2 /args:%3 /args:%4 /args:%5 /args:%6
    goto ExitRunner
    :RunParams7
    %MOLESPATH% /r:%NUNITPATH% %ASSEMBLY% /args:%1 /args:%2 /args:%3 /args:%4 /args:%5 /args:%6 /args:%7
    goto ExitRunner
    :RunParams8
    %MOLESPATH% /r:%NUNITPATH% %ASSEMBLY% /args:%1 /args:%2 /args:%3 /args:%4 /args:%5 /args:%6 /args:%7 /args:%8
    goto ExitRunner
    :RunParams9
    %MOLESPATH% /r:%NUNITPATH% %ASSEMBLY% /args:%1 /args:%2 /args:%3 /args:%4 /args:%5 /args:%6 /args:%7 /args:%8 /args:%9
    goto ExitRunner
    :ExitRunner
    

    只需更新软件包版本的路径即可。如果您有时间更新,也可以从其他程序运行它。

    我还尝试了按照您列出的参考手册进行操作,在所有测试中都出现以下错误“Microsoft.Moles.Framework.Moles.MoleInvalidOperationException:Moles上下文未创建。请使用MolesContext.Create”如何解决此问题?没有太多文档。您是否正确地使用了moled类型的“MoledType”属性,并按照手册中的描述,通过NUnit命令行运行程序运行测试?我可以向你保证,它是有效的…我正要链接到一篇我刚刚读到的关于Gallio和Moles的文章,然后我意识到是你写的。谢谢如果你在这里接受其中一个答案,如果他们能帮助你解决这个问题,那就太好了。