当使用TestNG执行测试包时,超类会多次实例化

时间:2015-07-07 05:43:10

标签: testing testng

我看到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

1 个答案:

答案 0 :(得分:0)

当你从包中运行它时,看起来这两个类ClassA和ClassB都是由TestNG逐个调用的。

First ClassB给你:

  

静态初始化块:ClassB构造函数中的初始CLass B

然后ClassA给你:

  

静态初始化块:初始CLass内部ClassB构造函数   在ClassA构造函数中

从包运行它不是运行TestNG的正确方法。如果您只想调用一个类,那么运行与TestNG运行相同的类就可以了,但是当您想要调用多个类时,您需要提及序列。 TestNG.xml文件可以帮助您定义并运行它。您可以通过不同方式调用它,阅读更多TestNG