Why isn't my @BeforeClass method running?
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 {
Solution 1:
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:
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:
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:
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)