4

我喜欢 LINQPad 并且每天都在使用它。一段时间以来,我一直在尝试寻找一种方法来使用 nunit 和 TypeMock 在 LINQPad 中创建和运行临时测试。

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

这是我所做的:

  1. 在 linqpad 中创建一个新查询,添加对 NUnit 和 Typemock 程序集的引用。

  2. 创建一个 Nunit 跑步者。(感谢http://www.paraesthesia.com/archive/2008/02/21/template-for-quick-typemock-testing.aspx

  3. 添加几个环境变量以启用 Typemock 分析器。

此时,我可以让 Nunit 和 Typemock 使用一些手动步骤(需要将 nunit 和 typemock dll 复制到执行目录,例如 \AppData\Local\Temp\1\LINQPad\skbidgcw)。

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

System.IO.FileNotFoundException : Could not load file or assembly 'LINQPad, Version=1.0.0.0, Culture=neutral, PublicKeyToken=21353812cd2a2db5' or one of its dependencies. The system cannot find the file specified.

我的 linqpad 查询在这里:http ://pastebin.com/QtPNCv25

任何帮助将不胜感激!

附带说明一下,我也尝试使用NUnitLite,虽然它可以很好地运行 Nunit 测试,但我找不到让它与 Typemock 一起工作的方法,它会抛出错误说“Typemock Isolator 需要与 Coverage Tool 链接才能运行”。

4

1 回答 1

2

终于找到了一种使用 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 );
}

现在我的生活应该容易得多。谢谢!

于 2012-11-05T23:24:47.733 回答