我看到TestNG的行为,我不确定是否正确。 我有两个类ClassA扩展了ClassB
public class ClassA extends ClassB{
static {
System.out.println("Static Initialization block : Init CLass A");
}
ClassA(){
System.out.println("inside ClassA constructor");
}
@Test
public void testme() throws Exception{
System.out.println("Test Case");
}
}
B组:
public class ClassB{
static {
System.out.println("Static Initialization block : Init CLass B");
}
ClassB(){
System.out.println("inside ClassB constructor");
}
@BeforeClass
public void setup(){
System.out.println("ClassB setup");
}
}
这些类放在com.test包
下现在当我从Eclipse中执行ClassA.java作为TestNG测试时,我得到以下输出:
静态初始化块:Init CLass B
静态初始化块:Init CLass A
在ClassB构造函数中
在ClassA构造函数中
如果我通过选择com.test包执行相同的代码,我会在下面看到输出:
静态初始化块:Init CLass B
在ClassB构造函数中
静态初始化块:Init CLass A
在ClassB构造函数中
在ClassA构造函数中
基本上,ClassB在作为testNg包执行时被实例化两次,因为ClassB包含@BeforeClass注释,这使得我的代码失败并出现Null指针异常。
我在这里错过任何东西吗?
由于 CG
答案 0 :(得分:0)
当你从包中运行它时,看起来这两个类ClassA和ClassB都是由TestNG逐个调用的。
First ClassB给你:
静态初始化块:ClassB构造函数中的初始CLass B
然后ClassA给你:
静态初始化块:初始CLass内部ClassB构造函数 在ClassA构造函数中
从包运行它不是运行TestNG的正确方法。如果您只想调用一个类,那么运行与TestNG运行相同的类就可以了,但是当您想要调用多个类时,您需要提及序列。 TestNG.xml文件可以帮助您定义并运行它。您可以通过不同方式调用它,阅读更多TestNG