在C#控制台中运行NUnit测试应用程序

问题描述:

我需要在控制台应用程序中以编程方式运行NUnit测试。使用NUnit的nunit-console.exe不是一个选项。我当前的代码是:在C#控制台中运行NUnit测试应用程序

var testRunner = new SimpleTestRunner(); 
var package = new TestPackage("MyTests.dll", new List<string> { ("c:\MyTests\MyTests.dll" }); 
testRunner.Load(package); 

当我呼叫负载,NUnit的查找在当前进程的目录下的DLL。所以我得到一个类似“c:\ MyTestRunner \ bin \ debug \ MyTests.dll”的FileNotFoundException。

我该如何强制它在不同的目录中查找dll?

可以改变当前目录

Directory.SetCurrentDirectory(@"c:\MyTestRunner\bin\debug\"); 

更新:

看来这不是那么简单。 I`v环顾四周,在这个问题上有一个articlestack question

希望它有帮助

+0

+ 0:不,实际上解决这个问题? Assembly.Load如何工作? – 2009-12-10 17:19:09

+0

在Windows中,dll的加载完成了:current dir,system32 dir,paths目录。所以它应该解决这个问题。 – Amirshk 2009-12-10 17:23:08

+0

谢谢,但这没有奏效。 NUnit的Load方法仍然在同一目录中查找。 – 2009-12-10 17:28:23

自从我遇到这个问题已经有一段时间了。我想我在这方面使用了方法#3:link。基本上诀窍是调用nunit核心代码来实际运行测试并解析程序集引用,但是要引用程序集。

我的理解是,标准的nunit-console.exe在第二个应用程序域中运行测试。这样它可以将AppDomainSetup.ApplicationBase属性设置为所有DLL所在的目录。它还允许测试套件可选地拥有自己的MyTests.dll.config副本。

我对NUnit源代码并不熟悉,而且快速浏览并未显示任何可以设置第二个应用程序域的明显帮助程序类。但是,不应该有任何异乎寻常的事情:创建一个AppDomainSetup,并修改ApplicationBase属性;创建一个新的AppDomain;在该应用程序域内创建您的SimpleTestRunner;并打电话Load就像你已经在做。

我不知道它将如何与NUnit的的SimpleTestRunner()工作,但使用RemoteTestRunner(),而不是正常工作对我来说:

TestPackage testPackage = new TestPackage(@"C:\YourProject.Tests.dll"); 
RemoteTestRunner remoteTestRunner = new RemoteTestRunner(); 
remoteTestRunner.Load(testPackage); 
TestResult result = remoteTestRunner.Run(new NullListener()); 

确认,该nunit.framework.dll库与你的测试程序集的文件夹。

给这个RemoteTestRunner()一试;)