忽略测试用例中的断言失败(JUnit)

时间:2011-02-28 20:27:55

标签: java junit qa

目前,我正在使用java和selenium rc编写自动化测试。

我想验证用户界面上的所有内容,功能如下:

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;
}

函数假设返回一个String包含有关测试的信息。但是,一旦发生断言错误,该函数就会停止。

所以,我想知道是否有办法忽略失败并继续执行所有断言验证。

感谢您的帮助

4 个答案:

答案 0 :(得分:18)

您可以使用JUnit 4 error collector rule

  

ErrorCollector规则允许   执行测试后继续   找到第一个问题(for   例如,收集所有   表中的行和报告不正确   他们一下子就完成了)

例如,您可以编写这样的测试。

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。根据您的喜好,这是积极的与否。

答案 1 :(得分:2)

来自Selenium documentation

  

所有Selenium Assertions都可以用于3种模式:“assert”,“verify”和“waitFor”。例如,您可以“assertText”,“verifyText”和“waitForText”。当“断言”失败时,测试将中止。 当“验证”失败时,测试将继续执行,记录失败。这允许单个“断言”以确保应用程序在正确的页面上,然后是一堆“验证”断言来测试表单字段值,标签等。

答案 2 :(得分:1)

我确定你现在已经弄清楚了:try-catch应该在for循环中,而不是在它之外;)

答案 3 :(得分:0)

不要在函数中声明任何内容。返回说null,并让任何人调用它继续前进,但如果函数返回null则失败