2013-04-25 52 views
4

我使用硒與C#自動化運行特定的測試,我想通過代碼來調用NUnit的,如下所示:NUnit的C#:通過編碼

CoreExtensions.Host.InitializeService(); 
TestPackage testPackage = new TestPackage(@"D:\Automation\bin\Debug\Test.dll"); 
RemoteTestRunner remoteTestRunner = new RemoteTestRunner(); 
remoteTestRunner.Load(testPackage); 
//TestFilter filter = new NameFilter(new TestName() { Name = "Test1" }); 
TestResult testResult = remoteTestRunner.Run(
    new NullListener(), 
    TestFilter.Empty, 
    false, 
    LoggingThreshold.Off 
); 

我能夠運行使用類別過濾器下面的測試

remoteTestRunner.Run(
    new NullListener(), 
    new CategoryFilter("MyCat"), 
    false, 
    LoggingThreshold.Off 
); 

但我想執行特定的測試。我如何設置套件過濾器?我曾嘗試以下,但它不工作:

TestFilter filter = new NameFilter(new TestName() { Name = "Test1" }); 
TestResult testResult = remoteTestRunner.Run(
    new NullListener(), 
    filter, 
    false, 
    LoggingThreshold.Off 
); 

如何運行特定的測試,我如何通過代碼傳遞參數?

+0

任何解決方案? – 2013-04-27 19:08:41

+0

如果NUnit無法使用,請向我推薦替代方案。 – 2013-04-30 04:29:51

+0

你知道如何使用TestName過濾器來做到這一點嗎?我正在嘗試相同的方式,但它不斷迴歸無疑? – pengibot 2013-05-09 16:38:43

回答

6

此示例代碼應該給你的,你必須做的,開始通過你的測試,並選擇要運行哪一個騎自行車的概念。我已經使用了幾個數組索引0來代替。

它的JIST是,你必須實際加載測試之前,你就可以開始嘗試單獨運行它們的測試需要具有隻有一次,他們已經加載被設置唯一TestId。以下代碼工作並在測試框架中的第一個testfixture中運行第一個測試。它還可以掃描所有你的測試名稱要麼顯示或運行基於一些標準

CoreExtensions.Host.InitializeService(); 
TestSuiteBuilder builder = new TestSuiteBuilder(); 
TestPackage testPackage = new TestPackage(@"path.to.dll"); 
RemoteTestRunner remoteTestRunner = new RemoteTestRunner(); 
remoteTestRunner.Load(testPackage); 
TestSuite suite = builder.Build(testPackage); 
TestSuite test = suite.Tests[0] as TestSuite; 
var numberOfTests = ((TestFixture)test.Tests[0]).TestCount; 

foreach (TestMethod t in ((TestFixture)test.Tests[0]).Tests) 
{ 
    Console.WriteLine(t.TestName.Name); 
} 

TestName testName = ((TestMethod)((TestFixture)test.Tests[0]).Tests[0]).TestName; 
TestFilter filter = new NameFilter(testName); 
TestResult result = test.Run(new NullListener(), filter); 
ResultSummarizer summ = new ResultSummarizer(result); 
Assert.AreEqual(1, summ.ResultCount); 
+1

謝謝,現在就試試吧 – pengibot 2013-05-10 09:59:34

+1

做過一個夢,謝謝。我現在也可以查看結果,並報告失敗的原因等。 – pengibot 2013-05-10 10:49:33

+0

Hi @ ED-209,感謝您的回覆。我正在使用下面的代碼來執行選定的測試,它的工作,但測試執行更多的時間比提到。 SimpleNameFilter filter = new SimpleNameFilter(); 的foreach(DR的DataRow在DT.Rows) { 字符串Test = ...; filter.Add(Test); } CoreExtensions.Host.InitializeService(); TestPackage testPackage = new TestPackage(@「.......... dll」); RemoteTestRunner remoteTestRunner = new RemoteTestRunner(); remoteTestRunner.Load(testPackage); TestResult result = remoteTestRunner.Run(new NullListener(),filter,true,LoggingThreshold.All); – 2013-05-20 06:17:10

0

這裏是我工作的代碼....

SimpleNameFilter filter = new SimpleNameFilter() 

    foreach (DataRow DR in DT.Rows) 
    { 
    string Test = "FullNameOftheTest"; 
    filter.Add(Test); 
    } 

    CoreExtensions.Host.InitializeService(); 
    TestPackage testPackage = new TestPackage(@"D:\Test\Test.dll"); 
    RemoteTestRunner remoteTestRunner = new RemoteTestRunner(); 
    remoteTestRunner.Load(testPackage); 
    TestResult result = remoteTestRunner.Run(new NullListener(), filter, true,   LoggingThreshold.All); 
    ResultSummarizer summaryResults = new ResultSummarizer(result); 

感謝大家的支持, 基肖爾。

+0

NUnit記錄了這些東西嗎?我想自己實現這樣的東西,但我寧願RTFM看看有哪些選項對我開放 – Andy 2015-08-13 10:20:25

+0

我們沒有記錄它,因爲這些都是內部方法,從發佈到發佈都是變化的。 NUnit一直因缺乏發佈的API來運行測試而受到影響。 NUnit 3.0提供了這樣一個API。粗略的文檔可以在https://github.com/nunit/dev/wiki/Test-Engine-API獲得,並在https://github.com/nunit/docs/wiki完成後移動。 – Charlie 2016-02-23 18:41:04