Java @BeforeMethod和继承-执行顺序(TestNG)

Java @BeforeMethod和继承-执行顺序(TestNG),java,testng,Java,Testng,我的问题基本上与相同,但针对TestNG处理的是@BeforeMethod,而不是@BeforeClass 测试类继承在决定@BeforeMethod带注释的方法将执行的顺序时起作用吗?如果我有一个类A和一个类B扩展了A,并且都有一个@BeforeMethod方法,那么父对象的(A)将在子对象的(B)之前运行,还是子对象的(B)将在父对象之前运行,或者顺序是否取决于其他因素,例如方法名称的字母顺序。我想看看是否有一个继承顺序可以依赖,而不必使用注释的参数,如dependsOnMethods。顺序

我的问题基本上与相同,但针对TestNG处理的是
@BeforeMethod
,而不是
@BeforeClass


测试类继承在决定
@BeforeMethod
带注释的方法将执行的顺序时起作用吗?如果我有一个类A和一个类B扩展了A,并且都有一个
@BeforeMethod
方法,那么父对象的(A)将在子对象的(B)之前运行,还是子对象的(B)将在父对象之前运行,或者顺序是否取决于其他因素,例如方法名称的字母顺序。我想看看是否有一个继承顺序可以依赖,而不必使用注释的参数,如dependsOnMethods。

顺序与类的继承无关

您可以尝试在
@Test
注释上设置优先级属性。如果注释中未设置任何参数,则它们将按字母顺序运行


您还根据您希望它们运行的顺序设置方法的前缀(例如:<代码> 01yMult1())/>代码> <代码> 02y方法2>(< /代码>).

,如其他答案中所解释的,TESTNG将考虑执行顺序的继承性。 如果您希望使“Before”方法的顺序显式,您也可以让子方法简单地调用父设置

public class ChildTest extends ParentTest {

    @BeforeMethod
    public void setup() {
       super.setup();
       // Child setup code follows here.
    }
}

public class ParentTest {
    @BeforeMethod // Only need if test will ever be invoked directly
    public void setup() {
      // Parent setup goes here.
    }
}
如果我有一个类A和一个类B扩展了A,并且都有一个@BeforeMethod方法,那么父级的(A)会在子级的(B)之前运行吗[…]

是的,他们会的

@BeforeMethod
方法将按继承顺序运行-首先是最高的超类,然后是继承链
@AfterMethod
方法以相反的顺序运行(在继承链上)

但是,请注意,不能保证一个类中多个带注释方法的顺序(因此最好避免这种情况)


阅读代码后,所有版本的TestNG似乎都是如此,但直到2016年10月才有记录:

上面的注释在放置到上时也将得到尊重(继承) TestNG类的超类。例如,这对于 将多个测试类的测试设置集中在一个公共 超类

在这种情况下,TestNG保证“@Before”方法是 按继承顺序执行(先执行最高超类,然后执行 沿继承链向下),并按相反顺序使用“@After”方法 (在继承链的上游)

请参阅GitHub上的,或


免责声明:这是我写的,并提交到文档中。

“这发生在JUnit中,但不是TestNG”这是错误的,TestNG也这样做(请参阅我的答案)。您的解决方案也可以工作,但我不希望在每个测试类中手动调用父设置方法(另外,您可能会忘记调用它)。抱歉,正如我在回答中所写的,我检查了TestNG源代码,并且当前的行为似乎也出现在早期版本中。无论如何,到2019年,答案不再正确。我提交了一个编辑,并删除了下一票:-)。问题显然是关于配置注释(如BeforeMethod)的执行顺序,它依赖于继承,而不是关于@Test注释