gpt4 book ai didi

testing - 使用 TestNG 执行测试包时,父类(super class)被多次实例化

转载 作者:行者123 更新时间:2023-11-28 20:54:24 25 4
gpt4 key购买 nike

我看到 TestNG 的行为我不确定是否正确。我有两个类 ClassA extends 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 测试时,我得到以下输出:

静态初始化 block :Init Class B
静态初始化 block :Init Class A
在 ClassB 构造函数中
在 ClassA 构造函数中

如果我通过选择 com.test 包执行相同的代码,我会看到以下输出:

静态初始化 block :Init Class B
在 ClassB 构造函数中
静态初始化 block :Init Class A
在 ClassB 构造函数中
在 ClassA 构造函数中

基本上,ClassB 在作为 testNg 包执行时被实例化两次,因为 ClassB 包含@BeforeClass 注释,这使我的代码因空指针异常而失败。

我在这里遗漏了什么吗?

谢谢电脑动画

最佳答案

当您从包中运行它时,看起来类 ClassA 和 ClassB 都被 TestNG 一一调用。

First ClassB 给你:

Static Initialization block : Init CLass B inside ClassB constructor

然后 ClassA 给你:

Static Initialization block : Init CLass A inside ClassB constructorinside ClassA constructor


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

关于testing - 使用 TestNG 执行测试包时,父类(super class)被多次实例化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31260618/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com