AssertionFailureIgnored
This assertion throws an AssertionError if it fails, which will be caught by an enclosing try block.

Severity
WARNING
Tags
LikelyError

The problem

JUnit’s fail() and assert* methods throw an AssertionError, so using the try/fail/catch pattern to test for AssertionError (or any of its super-types) is incorrect. The following example will never fail:

try {
  doSomething();
  fail("expected doSomething to throw AssertionError");
} catch (AssertionError expected) {
  // expected exception
}

To avoid this issue, prefer JUnit’s assertThrows() API:

import static com.google.common.truth.Truth.assertThat;
import static org.junit.Assert.assertThrows;

@Test
public void testFailsWithAssertionError() {
  AssertionError thrown = assertThrows(
      AssertionError.class,
      () -> {
        doSomething();
      });
  assertThat(thrown).hasMessageThat().contains("something went terribly wrong");
}

Suppression

Suppress false positives by adding the suppression annotation @SuppressWarnings("AssertionFailureIgnored") to the enclosing element.