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

Lyn*_*lds 42 java junit annotations

我有以下代码:

    @BeforeClass
    public static void setUpOnce() throws InterruptedException {
        fail("LOL");
    }
Run Code Online (Sandbox Code Playgroud)

以及@Before,@ After,@ Test或@AfterClass方法的各种其他方法.

启动时测试不会失败,因为它似乎应该.有谁可以帮助我吗?

我有JUnit 4.5

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

public class myTests extends TestCase {
Run Code Online (Sandbox Code Playgroud)

use*_*421 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
    ...
Run Code Online (Sandbox Code Playgroud)

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


Vla*_*mir 16

该方法必须是静态的,不能直接调用失败(否则不会执行其他方法).

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

}
Run Code Online (Sandbox Code Playgroud)

和输出(毫不奇怪):

@BeforeClass
@Before
@Test
@After
@AfterClass
Run Code Online (Sandbox Code Playgroud)


小智 13

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

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

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