2009-08-05 58 views
0

當我的集成測試失敗時(即Assert.AreEqual失敗),我想調用一個方法,是否有我可以在NUnit框架中訂閱的任何事件委託?當測試失敗時,事件代表當然必須被解僱。什麼事件處理程序訂閱和Assert.AreEqual失敗

這是因爲在我的測試中有很多Assert語句,我不能告訴需要記錄Assert以及導致我的錯誤跟蹤器出現問題的斷言信息。最好的辦法是在測試失敗時調用委託方法。

回答

0

似乎沒有事件,我可以在斷言的情況下訂閱失敗

0

我很好奇,你試圖通過這樣做解決什麼問題?我不知道用NUnit做這件事的方法,但是有一種混亂的方式來做到這一點。您可以提供一個Func並將其作爲失敗消息調用。 Func的主體可以爲您提供您正在尋找的代表團。

var callback = new Func<string>(() => { 
     // do something 
     return "Reason this test failed"; 
    }); 
Assert.AreEqual("", " ", callback.Invoke()); 
0

這聽起來像你想創建自己的測試亞軍。

測試(定義動作)和測試運行(實際運行測試)之間存在區別。在這種情況下,如果您想檢測測試失敗,則在測試運行時您必須執行此操作。

如果您所要做的只是發送失敗的電子郵件,那麼創建運行命令行運行程序的腳本(powershell/batch)可能是最簡單的,並且會在發送失敗時向您的錯誤跟蹤系統發送電子郵件?)

如果您想要更復雜的交互性,您可能需要考慮創建一個自定義運動員。跑步者可以運行測試,然後根據結果採取行動。在這種情況下,您應該在Nunit.Core命名空間中查看測試運行器界面。

例如(未測試):

TestPackage package = new TestPackage(); 
package.add("c:\some\path\to.dll"); 
SimpleTestRunner runner = new SimpleTestRunner(); 
if (runner.Load(Package)){ 
    var results = runner.Run(new NullListener(), TestFilter.Empty, false, LoggingThreshold.Off); 
    if(results.ResultState != ResultState.Success){ 
     ... do something interesting ... 
    } 
} 

編輯:的代碼更好的代碼段https://stackoverflow.com/a/5241900/1961413

相關問題