2011-02-28 118 views
14

當前,我正在使用java和selenium rc編寫自動化測試。忽略測試用例中的聲明失敗(JUnit)

我想驗證所有在場的用戶界面上的內容,功能,即如下:

public String UITest() throws IOException { 

    String result="Test Start<br />"; 

    try { 
     openfile(1); 
     for (String url : uiMaps.keySet()) { 
      selenium.open(url); 
      for (String item : uiMaps.get(url)) {     
       assertEquals(url+" check: " + item, true,selenium.isTextPresent(item)); 
       result+=url+" check: " + item+" : OK<br />"; 
      } 
     } 
    } catch (AssertionError e) { 
     result+=e.getMessage(); 
    } 
    result+="Test finished<br />"; 
    return result; 
} 

功能假設返回一個字符串包含有關測試的信息。但是,一旦發生斷言錯誤,函數就會停止。

所以,我想知道是否有辦法忽略失敗並繼續執行所有的斷言驗證。

感謝您的任何幫助

回答

18

你可以使用一個JUnit 4 error collector rule

的ErrorCollector規則允許 執行的測試,以繼 後發現第一個問題(對於 例如,收集所有的 不正確表中的行,並立即報告 他們全部)

例如你可以寫這樣的測試。

public static class UsesErrorCollectorTwice { 
    @Rule 
    public ErrorCollector collector= new ErrorCollector(); 

    @Test 
    public void example() { 
    String x = [..] 
    collector.checkThat(x, not(containsString("a"))); 
    collector.checkThat(y, containsString("b"));    
    } 
} 

錯誤收集器使用hamcrest Matchers。根據您的喜好,這是積極或不積極的。

+0

看來它會執行所有的測試,即使有一個失敗。但我有另一個問題。我檢查了API,它說表中的所有不正確的行,並一次報告它們。我的問題是,我能以任何方式獲取表格的信息?謝謝。 – user638297 2011-02-28 22:58:56

+0

由於原始錯誤收集器的錯誤列表的可訪問性,我通過繼承junit實現了自己的錯誤收集器。現在它可以工作。非常感謝您的幫助。 – user638297 2011-03-01 00:20:54

+0

@ user638297是的,實現一個完全符合您需要的MethodRule並不難。你能收集你尋找的所有信息嗎? – 2011-03-01 08:48:17

0

不要在函數中聲明任何東西。返回說空,而是和有誰調用它繼續下去,但隨後失敗,如果該函數返回null

2

documentation

所有硒斷言可以在3種模式下使用:「斷言」,「驗證「和」waitFor「。例如,你可以「assertText」,「verifyText」和「waitForText」。當「斷言」失敗時,測試會中止。 當「驗證」失敗時,測試將繼續執行,記錄失敗。這允許一個單一的「斷言」,以確保應用程序在正確的頁面上,接着是一串「驗證」斷言測試表單字段值,標籤等

+0

我認爲問題是JUnit的assertEquals功能,而不是硒,因爲我使用的硒功能是「isTextPresent」,它只負責返回一個布爾值。糾正我,如果我錯了。謝謝。 – user638297 2011-02-28 21:23:31

+1

根據文檔,您總是可以選擇:* assert * TextPresent,* verify * TextPresent和*是* TextPresent。每個版本都有不同的行爲。 – 2011-02-28 21:35:12

1

我敢肯定,你搞明白了自己現在:在try-catch應該是裏面的for循環,而不是外界的它;)