2009-12-10 146 views
2

我需要在控制檯應用程序中以編程方式運行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?

回答

1

可以改變當前目錄

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

0

自從我遇到這個問題已經有一段時間了。我想我在這方面使用了方法#3:link。基本上訣竅是調用nunit核心代碼來實際運行測試並解析程序集引用,但是要引用程序集。

0

我的理解是,標準的nunit-console.exe在第二個應用程序域中運行測試。這樣它可以將AppDomainSetup.ApplicationBase屬性設置爲所有DLL所在的目錄。它還允許測試套件可選地擁有自己的MyTests.dll.config副本。

我對NUnit源代碼並不熟悉,而且快速瀏覽並未顯示任何可以設置第二個應用程序域的明顯幫助程序類。但是,不應該有任何異乎尋常的事情:創建一個AppDomainSetup,並修改ApplicationBase屬性;創建一個新的AppDomain;在該應用程序域內創建您的SimpleTestRunner;並打電話Load就像你已經在做。

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()一試;)

相關問題