Ignore Assertion failure in a testcase (JUnit)

2019-03-25 00:19发布

Currently, I am writing the automation testing using java and selenium rc.

I would like to verify all the contents present on the user interface, the function is ie below:

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

the function suppose return a String contains information about the testing. However, the function stopped once there is an assertion error happened.

So, I want to know whether there is a way to ignore the failure and keep executing all the assertion verifications.

Thanks for any help

标签: java junit qa
4条回答
地球回转人心会变
2楼-- · 2019-03-25 00:49

Don't assert anything in the function. Return say null instead, and have whoever's calling it to keep going but then fail if the function returned null

查看更多
仙女界的扛把子
3楼-- · 2019-03-25 00:52

I'm sure you've figured it out yourself by now: the try-catch should be inside the for loop, not outside of it ;)

查看更多
姐就是有狂的资本
4楼-- · 2019-03-25 00:55

From Selenium documentation:

All Selenium Assertions can be used in 3 modes: "assert", "verify", and "waitFor". For example, you can "assertText", "verifyText" and "waitForText". When an "assert" fails, the test is aborted. When a "verify" fails, the test will continue execution, logging the failure. This allows a single "assert" to ensure that the application is on the correct page, followed by a bunch of "verify" assertions to test form field values, labels, etc.

查看更多
Ridiculous、
5楼-- · 2019-03-25 01:11

You could use a JUnit 4 error collector rule:

The ErrorCollector rule allows execution of a test to continue after the first problem is found (for example, to collect all the incorrect rows in a table, and report them all at once)

For example you can write a test like this.

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

The error collector uses hamcrest Matchers. Depending on your preferences this is positive or not.

查看更多
登录 后发表回答