我需要在控制台应用程序中以编程方式运行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?
答案 0 :(得分:1)
您可以更改当前目录
Directory.SetCurrentDirectory(@"c:\MyTestRunner\bin\debug\");
<强>更新强>
这似乎并非如此简单。 我环顾四周,这个问题上有article和stack question。
希望有所帮助
答案 1 :(得分:1)
我不确定如何使用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()
;)
答案 2 :(得分:0)
我的理解是标准的nunit-console.exe在第二个应用程序域中运行其测试。这样它就可以将AppDomainSetup.ApplicationBase
属性设置为所有DLL所在的目录。它还允许测试套件可选地拥有自己的MyTests.dll.config副本。
我不熟悉NUnit源代码,快速浏览并未显示任何可以设置第二个应用程序域的明显帮助程序类。但是,不应该有任何不寻常的事情:创建一个AppDomainSetup
属性改变的ApplicationBase
;创建一个新的AppDomain
;在该应用域内创建SimpleTestRunner
;并且像你已经做的那样打电话给Load
。