为什么我的@BeforeClass方法没有运行?

问题描述 投票:43回答:5

我有以下代码。

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

还有其他一些方法是@Before, @After, @Test或者@AfterClass方法.

在启动时,测试并没有失败,因为它似乎应该。谁能帮帮我?

我有JUnit 4.5

该方法在立即调用setUp()时失败,该方法被注释为@before.Class def是 。

public class myTests extends TestCase {
java junit annotations
5个回答
65
投票

不要同时扩展TestCase和使用注解! 如果你需要创建一个带有注解的测试套件,请使用RunWith注解,比如。

@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
    ...

(习惯上:类名用大写字母)


16
投票

该方法 必须是静态的 而不是直接调用fail(否则其他方法不会被执行)。

下面的类显示了所有标准的JUnit 4方法类型。

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");
    }

}

而输出结果是(并不奇怪)。

@BeforeClass
@Before
@Test
@After
@AfterClass

4
投票

确保你从正确的包中导入了@Test。

  • 正确的包:org.junit.Test
  • 错误的pacakge:org.junit.jupiter.api.Test。

请注意,这是为解决。如果你的@Before, @Atter, 等等根本没有被调用.


2
投票

请确保.Before, @Atter等没有被调用。

  • 你的测试类没有从TestCase继承。
  • @BeforeClass方法是静态的
  • 在测试类的层次结构中,你没有一个以上的@BeforeClass方法(只有最专业的@BeforeClass方法会被执行)。

0
投票

为了使之前注释的函数能够运行,我不得不做以下工作:如果你使用Maven,添加一个对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>           

和依赖关系。

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

确保你的Junit Test类没有扩展The TestCase类,因为这将导致与旧版本的重叠。

public class TuxedoExceptionMapperTest{
   protected TuxedoExceptionMapper subject;

   @Before
   public void before() throws Exception {
     subject = TuxedoExceptionMapper.getInstance();
      System.out.println("Start");
      MockitoAnnotations.initMocks(this);
   }
}
© www.soinside.com 2019 - 2024. All rights reserved.