尝试在LINQPad中使用TypeMock运行nunit测试时出错

尝试在LINQPad中使用TypeMock运行nunit测试时出错,nunit,linqpad,typemock,Nunit,Linqpad,Typemock,我喜欢LINQPad并每天使用它。一段时间以来,我一直在尝试在LINQPad中使用nunit和TypeMock创建和运行特别测试 所以我偶然发现了一些结果,但仍然缺少一些链接 以下是我所做的: 在linqpad中创建新查询,添加对NUnit和Typemock程序集的引用 创建一个Nunit runner。(感谢) 添加两个环境变量以启用Typemock探查器 此时,我能够让Nunit和Typemock执行一些手动步骤(需要将Nunit和Typemock DLL复制到执行目录,例如,\AppDat

我喜欢LINQPad并每天使用它。一段时间以来,我一直在尝试在LINQPad中使用nunit和TypeMock创建和运行特别测试

所以我偶然发现了一些结果,但仍然缺少一些链接

以下是我所做的:

  • 在linqpad中创建新查询,添加对NUnit和Typemock程序集的引用

  • 创建一个Nunit runner。(感谢)

  • 添加两个环境变量以启用Typemock探查器

  • 此时,我能够让Nunit和Typemock执行一些手动步骤(需要将Nunit和Typemock DLL复制到执行目录,例如,\AppData\Local\Temp\1\LINQPad\skbidgcw)

    但是如果我将程序集(我想测试)添加到LINQPad脚本中,测试将失败,因为NUnit无法在执行目录中找到程序集。我甚至尝试将所有DLL复制到该位置,但这也会失败,原因是:

    System.IO.FileNotFoundException:无法加载文件或程序集“LINQPad,版本=1.0.0,区域性=中性,PublicKeyToken=21353812cd2a2db5”或其依赖项之一。系统找不到指定的文件。

    我的linqpad查询如下:

    任何帮助都将不胜感激


    顺便说一句,我也尝试过使用NUnitLite,虽然它运行的Nunit测试非常漂亮,但我找不到一种方法让它与Typemock一起工作,它抛出了一个错误,说“Typemock隔离器需要与覆盖工具链接才能运行”。

    最终找到了一种方法来实现我想使用NUnitLite做的事情

    • 将以下环境变量添加到我的系统中以启用Typemock探查器
    Cor_Enable_Profiling=0×1

    COR_PROFILER={B146457E-9AED-4624-B1E5-968D274416EC}

    (NUnitLite可能已经在另一个AppDomain中运行了测试,因此通过LINQPad设置环境变量并没有启用探查器;如果NUnitLite中有开关这样做,这可能会被绕过,但我还没有研究过。)

    • 将TypeMock.dll和TypeMock.ArrangeActAssert.dll放在Linqpad的插件文件夹中

    • 创建新查询并通过Nuget添加NUnitLite。添加必要的名称空间

    现在,下面的方法应该可以工作了

    void Main()
    {
        new NUnitLite.Runner.TextUI().Execute( new[]{"-noheader"} );
    }
    
    // Define other methods and classes here
    [Test, Isolated]
    public void TestMock()
    {
        Isolate.WhenCalled( () => DateTime.Now ).WillReturn( DateTime.Today );
    
        var dt = DateTime.Now;
    
        Assert.AreEqual( DateTime.Today, dt );
    }
    

    现在我的生活应该轻松多了。谢谢

    如果在“编辑|首选项|高级|执行”中禁用程序集引用阴影,会有什么区别吗?不,不会。仍然获得相同的“System.IO.FileNotFoundException:无法加载文件或程序集'LINQPad,版本=1.0.0.0…”。