假设类继承就像 C -> B -> A,其中 A 是最顶层的父类(super class)。
class A {
@BeforeClass
void setUp() {
//some stuff
}
}
class B extends A {
}
@Test
class C extends B {
//running this class DOES NOT invoke setUp() from A.
}
我在A类中有@BeforeClass testng注释。我只用@Test注释C类。现在,我期望在运行类 C 时,它应该执行父类(super class) A 中带 @BeforeClass 注释的方法。但事实并非如此。
但是当我将 @BeforeClass 注释移动到 B 类时它就会运行。
有什么想法吗?
现在,解决方法是在 B 类中重新注释。
class A {
@BeforeClass
void setUp() {
//some stuff
}
}
class B extends A {
@BeforeClass
void setUp() {
super.setUp();
//some stuff
}
}
@Test
class C extends B {
//running this class invokes setUp() from only B.
}
注意:如果一开始只有两级继承,则不存在此问题。
最佳答案
问题是 A 和 B 之间的方法名称相同。
当TestNG寻找配置方法时,它不会找到B
的setUp()
方法上的注释。
在每种情况下,您都必须在 B
中注释您的方法,因为 TestNG 无法找到没有注释的配置方法。
您可以保留您所使用的工作,也可以重命名一种配置方法。 setUp
不再是强制性的。
但我们可以假设这是一个可以通过 TestNG 解决的问题。因此,您应该在该项目上开票:http://github.com/cbeust/testng
关于java - 如果 TestNG @BeforeClass 不是直接父类,则不会从父类(super class)运行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33689384/