76

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?

Allain Lalonde
  • 91,574
  • 70
  • 187
  • 238

6 Answers6

106

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

studgeek
  • 14,272
  • 6
  • 84
  • 96
guerda
  • 23,388
  • 27
  • 97
  • 146
  • 1
    I agree that this should work, so +1. Except with netbeans 6.2 and jUnit 4.5 @ignore is listed as only being valid for Methods. – Allain Lalonde Jan 20 '09 at 15:18
  • Looking it up and Libary's called 4.5 but the jar is junit4-1.jar weird. Accepted your answer. Thanks. – Allain Lalonde Jan 20 '09 at 15:22
  • Can you point me to valid reference where it says @Ignore is valid for methods only from junit 4.5? I can't seem to find it. – deepakraut Apr 25 '13 at 10:59
  • ...and if I want to ignore test for all methods except one (instead of putting @ignore above each method)? – O.Badr Aug 14 '16 at 23:48
34

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.

guerda
  • 23,388
  • 27
  • 97
  • 146
matt burns
  • 24,742
  • 13
  • 105
  • 107
25

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)

Aaron Digulla
  • 321,842
  • 108
  • 597
  • 820
15

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() { }
Youcef LAIDANI
  • 55,661
  • 15
  • 90
  • 140
11

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.

Yuri
  • 4,254
  • 1
  • 29
  • 46
Tal Avissar
  • 10,088
  • 6
  • 45
  • 70
1

Adding an empty test works.

@Test(expected = Test.None.class)
public void ATest() {}

Beware, adding it without (expected = Test.None.class) will add an "Add at least one assertion" sonar issue.