Why isn't my @BeforeClass method running?

JavaJunitAnnotations

Java Problem Overview


I have the following code:

    @BeforeClass
    public static void setUpOnce() throws InterruptedException {
        fail("LOL");
    }

And various other methods that are either @Before, @After, @Test or @AfterClass methods.

The test doesn't fail on start up as it seems it should. Can someone help me please?

I have JUnit 4.5

The method is failing in an immediate call to setUp() which is annotated as @before. Class def is :

public class myTests extends TestCase {

Java Solutions


Solution 1 - Java

do NOT extend TestCase AND use annotations at the same time!
If you need to create a test suite with annotations, use the RunWith annotation like:

@RunWith(Suite.class)
@Suite.SuiteClasses({ MyTests.class, OtherTest.class })
public class AllTests {
    // empty
}


public class MyTests {  // no extends here
    @BeforeClass
    public static void setUpOnce() throws InterruptedException {
        ...
    @Test
    ...

(by convention: class names with uppercase letter)

Solution 2 - Java

the method must be static and not directly call fail (otherwise the other methods won't be executed).

The following class shows all the standard JUnit 4 method types:

public class Sample {

    @BeforeClass
    public static void beforeClass() {
        System.out.println("@BeforeClass");
    }

    @Before
    public void before() {
        System.out.println("@Before");
    }

    @Test
    public void test() {
        System.out.println("@Test");
    }

    @After
    public void after() {
        System.out.println("@After");
    }

    @AfterClass
    public static void afterClass() {
        System.out.println("@AfterClass");
    }

}

and the ouput is (not surprisingly):

@BeforeClass
@Before
@Test
@After
@AfterClass

Solution 3 - Java

Make sure you imported @Test from the correct package.

  • Correct package: org.junit.Test
  • Incorrect pacakge: org.junit.jupiter.api.Test

Please note that this is a solution for: If your @Before, @Atter, etc did not get called at all.

Solution 4 - Java

Make sure that :

  • Your test class doesn't inherits from TestCase
  • The @BeforeClass method is static
  • You don't have more than one @BeforeClass method in test class hierarchy (only the most specialized @BeforeClass method will be executed)

Solution 5 - Java

Check your imports.

  • @Before
  • @After
  • @BeforeClass (this should be static)
  • @AfterClass (this should be static)

and @Test annotations should import from same path.

Solution 6 - Java

In order that the before annotated function will run , I had to do the following: If you use Maven , add a dependency to Junit 4.11+:

      <properties>
              <version.java>1.7</version.java>
              <version.log4j>1.2.13</version.log4j>
              <version.mockito>1.9.0</version.mockito>
              <version.power-mockito>1.4.12</version.power-mockito>
               <version.junit>4.11</version.junit>   
              <version.power-mockito>1.4.12</version.power-mockito>
      </properties>           

and the dependency:

      <dependencies>
        <dependency>
         <groupId>junit</groupId>
         <artifactId>junit</artifactId>
         <version>${version.junit}</version>
         <scope>test</scope>
       </dependency>    
        .
        .
        .
      </dependencies>

   

Make sure your Junit Test class is not extending The TestCase class, since this will cause overlapping with Older version:

public class TuxedoExceptionMapperTest{
   protected TuxedoExceptionMapper subject;

   @Before
   public void before() throws Exception {
     subject = TuxedoExceptionMapper.getInstance();
      System.out.println("Start");
      MockitoAnnotations.initMocks(this);
   }
}

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
QuestionLynden ShieldsView Question on Stackoverflow
Solution 1 - Javauser85421View Answer on Stackoverflow
Solution 2 - JavaVladimirView Answer on Stackoverflow
Solution 3 - JavaKishoreView Answer on Stackoverflow
Solution 4 - Javaben75View Answer on Stackoverflow
Solution 5 - JavaA. BerkView Answer on Stackoverflow
Solution 6 - JavashacharsolView Answer on Stackoverflow