2010-05-13 61 views
18

我試圖編寫一個簡單的方法來接收文件並使用NUnit運行它。 我設法使用NUnit的源代碼編譯的代碼不起作用:如何從C#代碼運行NUnit測試

if(openFileDialog1.ShowDialog() != DialogResult.OK) 
{ 
    return; 
} 

var builder = new TestSuiteBuilder(); 
var testPackage = new TestPackage(openFileDialog1.FileName); 
var directoryName = Path.GetDirectoryName(openFileDialog1.FileName); 
testPackage.BasePath = directoryName; 
var suite = builder.Build(testPackage); 

TestResult result = suite.Run(new NullListener(), TestFilter.Empty); 

的問題是,我不斷收到由builder.Build拋出的異常,說明該組件沒有被發現。

我錯過了什麼? 有沒有其他方法可以從代碼中運行測試(不使用Process.Start)?

+0

說實話,我不知道這種測試方式。猜測是盲目的,你是否試圖通過NUnit GUI運行這個測試,或者驗證你是否擁有引用到項目中的所有依賴項,或者如果程序集位於異常說明找不到的地方? NUnit的測試類必須具有[TestFixture()]屬性,而測試方法使用NUnit.Framework導入[Test()]屬性。 – 2010-05-16 15:31:38

回答

27

添加開頭以下行,樹立NUnit的框架,可以幫助你:

CoreExtensions.Host.InitializeService(); 

另一個「容易」的方式來執行NUnit的測試程序是:

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

你需要參考以下組件:

  • nunit.core.dll
  • nunit.core.interfaces.dll

當然並且,nunit.framework.dll必須與你的測試集的文件夾中;)

+1

是否記錄了這些東西?我想自己實現這樣的東西,但我寧願RTFM看看有什麼選項對我開放 – Andy 2015-08-13 10:19:46

+2

我沒有找到任何文檔,只好在[源代碼](https://github.com/nunit/) nunitv2)獲取更多信息。但是 - 當我在那裏時 - 我發現'RemoteTestRunner'和'SimpleTestRunner'之間的細微區別 - 前者爲您調用'CoreExtensions.Host.InitializeService',而Simple runner則不會(因此要求用戶將其添加到你的代碼)。 – SethO 2015-09-29 18:15:57