Why isn't my @BeforeClass method running?

后端 未结 5 1137
天涯浪人
天涯浪人 2020-12-05 13:00

I have the following code:

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

A

相关标签:
5条回答
  • 2020-12-05 13:27

    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
    
    0 讨论(0)
  • 2020-12-05 13:29

    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)

    0 讨论(0)
  • 2020-12-05 13:36

    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);
       }
    }
    
    0 讨论(0)
  • 2020-12-05 13:38

    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)
    0 讨论(0)
  • 2020-12-05 13:39

    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.

    0 讨论(0)
提交回复
热议问题