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

2022-08-31 20:28:56

我有以下代码:

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

以及各种其他方法,这些方法要么是@Before,@After,要么是@Test方法,要么是@AfterClass方法。

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

我有 JUnit 4.5

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

public class myTests extends TestCase {

答案 1

不要扩展测试用例并同时使用注释!
如果需要创建带有批注的测试套件,请使用 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
    ...

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


答案 2

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

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

推荐