我喜欢LINQPad并且每天都使用它。我一直试图找到一种方法在LINQPad中使用nunit和TypeMock创建和运行ad-hoc测试一段时间。
所以我偶然发现了一些结果,但仍然缺少一些链接。
这就是我所做的:
在linqpad中创建一个新查询,添加对NUnit和Typemock程序集的引用。
创建一个Nunit跑步者。 (感谢http://www.paraesthesia.com/archive/2008/02/21/template-for-quick-typemock-testing.aspx)
添加几个环境变量以启用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隔离器需要与Coverage Tool链接以运行“。
答案 0 :(得分:1)
终于找到了一种方法,可以使用NUnitLite做我想做的事。
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 );
}
现在我的生活应该相当容易。谢谢!