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

3
我需要在控制台应用程序中以编程方式运行NUnit测试。不能使用NUnit的nunit-console.exe。当前的代码如下:
var testRunner = new SimpleTestRunner();
var package = new TestPackage("MyTests.dll", new List<string> { ("c:\MyTests\MyTests.dll" });
testRunner.Load(package);

当我调用Load方法时,NUnit会在当前进程的目录中查找dll。因此,如果像"c:\MyTestRunner\bin\debug\MyTests.dll"这样的文件不存在,我会收到一个FileNotFoundException。
我该如何强制它在不同的目录中查找dll呢?
3个回答

2

我不确定如何在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() ;)


1

您可以更改当前目录

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

更新:

看起来这并不是那么简单。 我找了一下,有一篇文章和一个堆栈问题关于这个问题。

希望能有所帮助。


+0:那真的能解决如何使用Assembly.Load的问题吗? - Ruben Bartelink
在Windows中,DLL加载的顺序是:当前目录、system32目录和路径目录。因此,这应该可以解决问题。 - Amirshk
谢谢,但这并没有起作用。 NUnit的Load方法仍然在同一个目录中查找。 - Josh Wright

0

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

我不熟悉NUnit源代码,快速浏览也没有发现任何明显的辅助类可以设置第二个应用程序域。但是,这里没有什么特别的:使用更改后的ApplicationBase属性创建一个AppDomainSetup;创建一个新的AppDomain;在该应用程序域内创建您的SimpleTestRunner;并像您已经做的那样调用Load


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