For JUnit3-style tests, behavior is defined in
tests add behavior by overriding methods. For JUnit4-style tests, special
behavior happens with fields and methods annotated with JUnit 4 annotations.
Having JUnit4-style tests extend from
junit.framework.TestCase (directly or
indirectly) historically has been a source of test bugs and unexpected behavior
(e.g.: teardown logic and/or verification does not run because JUnit doesn’t
call the inherited code).
Error Prone also cannot infer whether the test class runs with JUnit 3 or JUnit 4.
Thus, even if the test class runs with JUnit 4, Error Prone will not run
additional checks which can catch common errors with JUnit 4 test classes.
Either use only JUnit4 classes and annotations and remove the inheritance from
TestCase, or use only JUnit 3 and remove the
@Test annotations. When looking
for replacements for base test classes, consider using Rules (see the
annotation and implementations of
Suppress false positives by adding an
@SuppressWarnings("JUnitAmbiguousTestClass") annotation to the enclosing element.