66
votes

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?

5
It is and still gets runAllain Lalonde
See similar question: stackoverflow.com/questions/672466/…Synox
i just came to know that incase we write a testcase then there should be atleast 1 @Test method inside the testcase and its mandotory. Other wise it would give us initialization error. Is it true?Shiva Komuravelly

5 Answers

98
votes

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

32
votes

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.

23
votes

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)

10
votes

There are three options:

  1. 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).

  2. 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 {...}
    
  3. 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.

6
votes

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() { }