Search code examples
javajunit4

Continuing test execution in junit4 even when one of the asserts fails


I have my existing framework built up using Jfunc which provides a facility to continue exection even when one of the asserts in the test case fails. Jfunc uses junit 3.x framework. But now we are migrating to junit4 so I can't use Jfunc anymore and have replaced it with junit 4.10 jar.
Now the problem is since we have extensively used jfunc in our framework, and with junit 4 we want to make our code continue the execution even when one of the asserts fails in a test case.
Does anyone has any suggestion/idea for this, i know in junit the tests needs to be more atomic i.e. one assert per test case but we can't do that in our framework for some reason.


Solution

  • You can do this using an ErrorCollector rule.

    To use it, first add the rule as a field in your test class:

    public class MyTest {
        @Rule
        public ErrorCollector collector = new ErrorCollector();
    
        //...tests...
    }
    

    Then replace your asserts with calls to collector.checkThat(...).

    e.g.

    @Test
    public void myTest() {
        collector.checkThat("a", equalTo("b"));
        collector.checkThat(1, equalTo(2));
    }