java - @BeforeClass 和继承 - 执行顺序

标签 java unit-testing testng

我有一个抽象基类,我将其用作单元测试的基础 (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)                // <-/

最佳答案

编辑:下面的答案是针对JUnit的,但我还是会把它留在这里,因为它可能会有所帮助。

根据JUnit api : "父类(super class)的@BeforeClass 方法将在当前类之前运行。"

我对此进行了测试,它似乎对我有用。

但是,正如@Odys 下面提到的,对于 JUnit,您需要有 两个名称不同的方法,否则将导致仅运行子类方法,因为父类将被隐藏。

关于java - @BeforeClass 和继承 - 执行顺序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2132734/

相关文章:

java - 当框架是Hybrid并且测试用例由Selenium中的excel驱动时,如何使用TestNG注释?

java - Testng 测试带有消息的特定异常

java - 运行 testng 套件时,SeleniumGrid2 自定义 maxSession 似乎未按预期工作(并行 =“classes” )

java - SOLR - PathHierarchyTokenizerFactory Facet 查询

java - 如何使用MySQL通过preparedStatement将数据从一张表复制到另一张表?

php - PHP 中的单元测试 cookie

用于表单编辑的 Django 单元测试

python - 名称错误 : name 'StaticLiveServerCase' is not defined

java - 如何通过 Maven 命令重新运行 TestNG 失败的测试

java - 运行和启动线程之间的区别