我有一个抽象基类,用作我的单元测试(TestNG 5.10)的基础。在此类中,我将初始化测试的整个环境,设置数据库映射等。此抽象类具有一个带有@BeforeClass批注的方法,该方法用于初始化。

接下来,我用具有@Test方法和@BeforeClass方法的特定类扩展该类。这些方法对环境进行特定于类的初始化(例如,将一些记录放入数据库中)。

如何执行@BeforeClass注释方法的特定顺序?我需要抽象基类中的那些要在扩展类中的那些之前执行。

例:

abstract class A {
    @BeforeClass
    doInitialization() {...}
}

class B extends A {
    @BeforeClass
    doSpecificInitialization() {...}

    @Test
    doTests() {...}
}

预期订单:
A.doInitialization
B.doSpecificInitialization
B.doTests

实际订单:
B.doSpecificInitialization // <- crashes, as the base init is missing
(A.doInitialization        // <---not executed
 B.doTests)                // <-/

最佳答案

不要将@BeforeClass放在abstract类上。从每个子类调用它。

abstract class A {
    void doInitialization() {}
}

class B extends A {
    @BeforeClass
    void doSpecificInitialization() {
        super.doInitialization();
    }

    @Test
    void doTests() {}
}

好像TestNG有 @BeforeClass(dependsOnMethods={"doInitialization"}) -试试看。

10-08 13:14