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

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

我想validation用户界面上的所有内容,function如下:

public String UITest() throws IOException { String result="Test Start
"; 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
"; } } } catch (AssertionError e) { result+=e.getMessage(); } result+="Test finished
"; return result; }

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

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

谢谢你的帮助

您可以使用JUnit 4错误收集器规则 :

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

来自Selenium 文档 :

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

我相信你现在已经弄明白了:try-catch应该在for循环中,而不是在它之外;)

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