在LINQPad中使用TypeMock运行NUnit测试时出现错误。

4
我喜欢LINQPad并每天使用它。我一直在试图找到一种方法,在LINQPad中创建和运行nunit和TypeMock的即席测试。

所以我四处寻找,并得到了一些结果,但仍然缺少一些链接。

这是我所做的:

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

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

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

此时,我能够通过一些手动步骤(需要将nunit和typemock dll复制到执行目录中,例如\AppData\Local\Temp\1\LINQPad\skbidgcw)使Nunit和Typemock正常工作。

但是,如果我将我们的程序集(我想要测试的)添加到LINQPad脚本中,测试将会失败,因为NUnit无法在执行目录中找到这些程序集。我甚至尝试将所有DLL文件复制到那里,但由于以下原因也会失败:

System.IO.FileNotFoundException : 无法加载文件或程序集“LINQPad, Version=1.0.0.0, Culture=neutral, PublicKeyToken=21353812cd2a2db5”或其某一个依赖项。系统找不到指定的文件。

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

任何帮助都将不胜感激!

顺便说一句,我还尝试使用NUnitLite,虽然它可以很好地运行Nunit测试,但我找不到一种方法使它与Typemock配合工作,它会抛出错误,说“Typemock Isolator需要与Coverage Tool链接才能运行”。


如果您在“编辑|首选项|高级|执行”中禁用汇编引用阴影处理,是否会有任何区别? - Joe Albahari
不,它没有。仍然出现相同的“System.IO.FileNotFoundException:无法加载文件或程序集'LINQPad,版本=1.0.0.0 ...”。 - Helios
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 );
}

现在我的生活应该会更加轻松。谢谢!

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接