2013-04-12 35 views
6

我需要以編程方式運行單獨的C#NUnit測試。我發現another post對於向我展示如何以編程方式運行整套測試非常有幫助,但我需要能夠選擇單個測試。以編程方式運行單獨的NUnit測試

我認爲設置一個NameFilter可以做到這一點,但是RemoteTestRunner似乎認爲當我的套件超過五十個時,我的套件中只有一個測試。它是否真的將單個DLL中的所有測試集中到一個龐大的測試中?有沒有辦法可以將它們分開並運行單個測試用例?

+0

你是什麼意思,通過編程運行?你是在談論啓動另一個進程,並通過命令傳遞命令來運行某些測試,或者以其他方式進行? – Zipper

+0

我的意思是編寫代碼,通過函數調用來執行單元測試: 'CoreExtensions.Host.InitializeService();' 'TestPackage testPackage = new TestPackage(@「C:\ Dev \ MyUnitTests.dll」);'' 'RemoteTestRunner remoteTestRunner =新RemoteTestRunner();' 'remoteTestRunner.Load(testPackage);' 'TestResult中的TestResult = remoteTestRunner.Run(新NullListener(),TestFilter.Empty,假,LoggingThreshold.Error);' – Huitzilopochtli

+1

基本上我想要做的是編寫代碼,爲我運行單元測試並將結果存儲在某些數據結構中。我不想從命令行或GUI運行測試,而是希望能夠編寫執行NUnit測試的代碼。我從我鏈接到的帖子中看到了代碼,它向我展示瞭如何以編程方式在給定的套件中運行_every_測試,但我希望能夠在套件中運行選定的測試。 – Huitzilopochtli

回答

0

我不得不使用一個SimpleNameFilter並傳遞給它的構造函數我想運行的單元測試的名稱。下面是我有:

SimpleNameFilter filter = new SimpleNameFilter("Google.Maps.Test.Integrations.GeocodingServiceTests.Empty_address"); 
TestResult testResult = remoteTestRunner.Run(new NullListener(), filter, false, LoggingThreshold.Error); 

您可以通過從測試本身計算出來或通過查看NUnit的程序測試的性能得到完全合格的測試名稱。

1

我必須通過一個過濾器爲好,只是執行

TestResult testResult = remoteTestRunner.Run(new NullListener(), null , false, LoggingThreshold.Error); 

在一個NullReferenceException結束。我很快創建了一個空過濾器

class EmptyFilter : TestFilter 
{ 

    public override bool Match(ITest test) 
    { 
     return true; 
    } 
} 

並將其傳遞給remoteTestRunner

TestResult testResult = remoteTestRunner.Run(new NullListener(), new EmptyFilter() , false, LoggingThreshold.Error); 

工作。可以投入一點的是搜索NUnit是否已經有了一個類似的Filter,可以重用,而不是創建一個自定義的Filter。