49

我有以下代码:

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

以及@Before、@After、@Test 或@AfterClass 方法等各种其他方法。

测试在启动时并没有像它看起来应该的那样失败。有人能帮助我吗?

我有 JUnit 4.5

该方法在对注释为@before 的setUp() 的立即调用中失败。类定义是:

public class myTests extends TestCase {
4

6 回答 6

69

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

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

于 2009-04-09T08:46:25.160 回答
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
于 2009-04-09T06:24:10.320 回答
14

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

  • 正确的包:org.junit.Test
  • 不正确的包:org.junit.jupiter.api.Test

请注意,这是一个解决方案:如果您的 @Before、@Atter 等根本没有被调用。

于 2020-05-13T15:38:49.880 回答
2

确保:

  • 您的测试类不继承自 TestCase
  • @BeforeClass 方法是静态的
  • 您在测试类层次结构中没有一个以上的 @BeforeClass 方法(只会执行最专业的 @BeforeClass 方法)
于 2016-04-01T09:06:30.800 回答
2

检查你的进口。

  • @前
  • @后
  • @BeforeClass(这应该是静态的)
  • @AfterClass(这应该是静态的)

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

于 2021-01-06T23:50:39.623 回答
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);
   }
}
于 2015-03-30T14:27:46.733 回答