为什么我的@BeforeClass方法不能运行?

时间:2009-04-09 06:22:33

标签: java junit annotations

我有以下代码:

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

以及其他各种方法,包括@ Before,@ After,@ Test或@AfterClass方法。

测试在启动时不会失败,因为它似乎应该。有人能帮帮我吗?

我有JUnit 4.5

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

public class myTests extends TestCase {

6 个答案:

答案 0 :(得分:64)

不要扩展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
    ...

(按照惯例:带大写字母的类名)

答案 1 :(得分:16)

方法must be static而不是直接调用失败(否则将不会执行其他方法)。

以下类显示了所有标准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

答案 2 :(得分:7)

确保从正确的程序包中导入@Test。

  • 正确的软件包:org.junit.Test
  • 错误信息:org.junit.jupiter.api.Test

请注意,这是针对以下情况的解决方案:如果根本没有调用您的@ Before,@ Atter等。

答案 3 :(得分:2)

确保:

  • 您的测试类不继承自TestCase
  • @BeforeClass方法是静态的
  • 在测试类层次结构中没有多个@BeforeClass方法(只会执行最专业的@BeforeClass方法)

答案 4 :(得分:2)

检查您的导入。

  • @Before
  • @After
  • @BeforeClass(这应该是静态的)
  • @AfterClass(这应该是静态的)

和 @Test 注释应该从相同的路径导入。

答案 5 :(得分: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类没有扩展TestCase类,因为这会导致与旧版本重叠:

public class TuxedoExceptionMapperTest{
   protected TuxedoExceptionMapper subject;

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