2012-02-01 78 views
6

我想在測試失敗時記錄一些上下文信息(如捕獲屏幕截圖)。 NUnit框架中有可擴展性的地方嗎?理想情況下它會是:在NUnit中捕獲斷言

[TearDown] 
    public void Down(AssertionException ex) {} 

但我們沒有它。我試圖創建一個外接但不知道如何將它在運行時進行註冊:

[NUnitAddin] 
public class UITestCase : TestCaseBase, NUnit.Core.EventListener, NUnit.Core.Extensibility.IAddin { 
    ............. 
    public void UnhandledException(Exception exception){} 

    public bool Install(NUnit.Core.Extensibility.IExtensionHost host) { 
     IExtensionPoint listeners = host.GetExtensionPoint("EventListeners"); 
     listeners.Install(this); 
     return true; 
    } 

}

UITestCase是所有的UI測試我的基類。 Install()方法只是不被調用。任何提示將不勝感激。

更新:一個外接登記測試都與NUnit的亞軍運行(在我的情況下,它是TestDriven.Net插件VS)和EventListener成員得到正確調用。問題是,他們都在 TearDown/TestFixtureTearDown方法(我的上下文丟失)之後調用了

試圖在我的TearDown中使用TestContext.CurrentContext.Result但訪問要麼StateStatus屬性會NullReferenceException :(

回答

2

升級到NUnit 2.6後TestContext.CurrentContext開始按預期工作。

0

我認爲你可以使用嘗試捕捉你的測試方法內捕捉異常,然後不喜歡裏面捕捉截圖一些自定義操作趕上。

+0

哦,不,當你有幾千個測試時,這不是一個選項。 – UserControl 2012-02-02 09:06:00

+0

您可以告訴我,這是數據驅動的測試,還是您有一千個不同的測試用例。 – 2012-02-02 16:45:35

2

我認爲IAddin方法有最有希望,雖然事件偵聽可能沒有用適當的擴展點您的需要。您是否嘗試過TestCaseBuildersTestDecorators一些推廣?

例如,TestDecorators文檔指出:

目的

TestDecorators能夠修改測試它一直後 構成。

擴展點

加載項使用主機通過名稱訪問此擴展點:

IExtensionPoint testDecorators = host.GetExtensionPoint( 「TestDecorators」);接口

傳遞給安裝必須實現 ITestDecorator接口擴展對象:

public interface ITestDecorator  
{  
    Test Decorate(Test test, MemberInfo member); 
} 

的裝飾方法可以做幾件事情,這取決於它需要完成:

  1. 返回測試未修改
  2. 修改測試對象的屬性並將其返回
  3. 用另一個ob替換測試ject,要麼放棄原來的或 聚合它在新的測試。

這聽起來像一個嘗試用自定義代碼包裝測試的好地方。

+0

謝謝,但我看不出它有什麼幫助。看着NUnit.Core.Test的成員,並沒有看到適當的點來獲得測試結果:( – UserControl 2012-02-13 08:43:43

3

如果你的意圖是運行應用程序的測試,NUnit不是最好的選擇,它只是不打算以這種方式使用。 NUnit用於單元測試,而不是集成測試,它將測試您的UI如何與邏輯和數據集成。當單元測試正在運行時(包括那些在nunit下的),沒有屏幕截圖被捕獲 - 測試運行器將輸出指向一個日誌文件,其中包含您想了解測試的所有信息,包括異常。

如果您正在嘗試進行UI測試,我建議您使用WebApp測試的Watin以及WPF/Winforms應用測試的White

+1

還有Coded UI,它是與VS2010 Premium/Ultimate一起提供的。 – 2012-02-13 01:16:04

+0

我使用Selenium進行UI測試,生成NUnit兼容的c#代碼,但是我想要的是框架不可知的,我只需要捕捉測試失敗,特別是當NUnit有它的手段(擴展點和TestContext)時沒有什麼大不了的。 – UserControl 2012-02-13 08:37:03