For JUnit3-style tests, behavior is defined in junit.framework.TestCase
and
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 @Rule
annotation and implementations of TestRule
and MethodRule
).
Suppress false positives by adding the suppression annotation @SuppressWarnings("JUnitAmbiguousTestClass")
to the enclosing element.