How to get Junit 4 to ignore a Base Test Class?

JunitJunit4

Junit Problem Overview


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?

Junit Solutions


Solution 1 - Junit

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

Solution 2 - Junit

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.

Solution 3 - Junit

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)

Solution 4 - Junit

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.

Solution 5 - Junit

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

Solution 6 - Junit

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.

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
QuestionAllain LalondeView Question on Stackoverflow
Solution 1 - JunitguerdaView Answer on Stackoverflow
Solution 2 - Junitmatt burnsView Answer on Stackoverflow
Solution 3 - JunitAaron DigullaView Answer on Stackoverflow
Solution 4 - JunitTal AvissarView Answer on Stackoverflow
Solution 5 - JunitYCF_LView Answer on Stackoverflow
Solution 6 - JunitDominik KolesárView Answer on Stackoverflow