How to get Junit 4 to ignore a Base Test Class?
I have a base class for many tests that has some helper methods they all need.
It does not by itself have any tests on it, but JUnit (in eclipse) is invoking the test runner on it and complaining that there are no methods to test.
How can I make it ignore this class?
I know I could add a dummyTest
method that would solve the problem, but it would also appear for all the children classes.
Suggestions?
Use to @Ignore
annotation. It also works on classes.
See this one:
@Ignore public class IgnoreMe {
@Test public void test1() { ... }
@Test public void test2() { ... }
}
Also, you can annotate a class containing test methods with @Ignore and none of the containing tests will be executed.
Source: JUnit JavaDoc
Just as a note, I'd always recommend giving a reason for the ignore:
@Ignore("This test will prove bug #123 is fixed, once someone fixes it")
I'm hoping the junit xml report formatter, used when running tests from ant, will one day include the ignored count (and the reasons) along with pass, fail, and error.
Making the class abstract
should be enough for JUnit 4. If it doesn't work, double check which version of JUnit you're using.
This also communicates your intent that this is just a fragment of a test.
It also prevents JUnit from counting the tests in the class as "ignored" (so the final count of ignored tests will be what you expect).
Alternatively, rename the class. Most of the runners use the class name to determine which classes are tests and which are helpers. In Maven with the default settings, you just have to make sure the base class doesn't begin or end with Test
and doesn't end with TestCase
(http://maven.apache.org/surefire/maven-surefire-plugin/examples/inclusion-exclusion.html)
There are three options:
In JUnit 4 or 5 its enough to make the base class abstract. If you use
@Igonre
attribute it will show it as an ignored test (and will add it to the total count of tests).-
You can use the
@Ignore
annotation. This annotation also works for classes. The@Ignore
test annotation is used to ignore particular tests or groups of tests in order to skip the build failure.@Ignore("Base class not yet ready") class MyBaseClassTestCases {...}
You can change the name of the test class that it will not have the word Test (case sensitive) at the start or the end of the test name/or the word TestCase at the end.
JUnit5
@Ignore
not exit in the future version, If you are using JUnit5, you can use @Disabled
from JUnit Jupiter
import org.junit.jupiter.api.Disabled;
You can even use @Disabled
with a comment @Disabled("some comment here")
Class
Annotate the class, will disable all the tests in the class :
@Disabled
public class DemoTest { }
@Disabled("some comment here")
public class DemoTest { }
Method
@Disabled
public void whenCaseThenResult() { }
@Disabled("some comment here")
public void whenCaseThenResult() { }