當我的集成測試失敗時(即Assert.AreEqual
失敗),我想調用一個方法,是否有我可以在NUnit框架中訂閱的任何事件委託?當測試失敗時,事件代表當然必須被解僱。什麼事件處理程序訂閱和Assert.AreEqual失敗
這是因爲在我的測試中有很多Assert
語句,我不能告訴需要記錄Assert
以及導致我的錯誤跟蹤器出現問題的斷言信息。最好的辦法是在測試失敗時調用委託方法。
當我的集成測試失敗時(即Assert.AreEqual
失敗),我想調用一個方法,是否有我可以在NUnit框架中訂閱的任何事件委託?當測試失敗時,事件代表當然必須被解僱。什麼事件處理程序訂閱和Assert.AreEqual失敗
這是因爲在我的測試中有很多Assert
語句,我不能告訴需要記錄Assert
以及導致我的錯誤跟蹤器出現問題的斷言信息。最好的辦法是在測試失敗時調用委託方法。
似乎沒有事件,我可以在斷言的情況下訂閱失敗
我很好奇,你試圖通過這樣做解決什麼問題?我不知道用NUnit做這件事的方法,但是有一種混亂的方式來做到這一點。您可以提供一個Func並將其作爲失敗消息調用。 Func的主體可以爲您提供您正在尋找的代表團。
var callback = new Func<string>(() => {
// do something
return "Reason this test failed";
});
Assert.AreEqual("", " ", callback.Invoke());
這聽起來像你想創建自己的測試亞軍。
測試(定義動作)和測試運行(實際運行測試)之間存在區別。在這種情況下,如果您想檢測測試失敗,則在測試運行時您必須執行此操作。
如果您所要做的只是發送失敗的電子郵件,那麼創建運行命令行運行程序的腳本(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