What's the actual use of 'fail' in JUnit test case? What's the actual use of 'fail' in JUnit test case? java java

What's the actual use of 'fail' in JUnit test case?


Some cases where I have found it useful:

  • mark a test that is incomplete, so it fails and warns you until you can finish it
  • making sure an exception is thrown:
try{  // do stuff...  fail("Exception not thrown");}catch(Exception e){  assertTrue(e.hasSomeFlag());}

Note:

Since JUnit4, there is a more elegant way to test that an exception is being thrown:Use the annotation @Test(expected=IndexOutOfBoundsException.class)

However, this won't work if you also want to inspect the exception, then you still need fail().


Let's say you are writing a test case for a negative flow where the code being tested should raise an exception.

try{   bizMethod(badData);   fail(); // FAIL when no exception is thrown} catch (BizException e) {   assert(e.errorCode == THE_ERROR_CODE_U_R_LOOKING_FOR)}


I think the usual use case is to call it when no exception was thrown in a negative test.

Something like the following pseudo-code:

test_addNilThrowsNullPointerException(){    try {        foo.add(NIL);                      // we expect a NullPointerException here        fail("No NullPointerException");   // cause the test to fail if we reach this                 } catch (NullNullPointerException e) {        // OK got the expected exception    }}