@Test 在 TestNG Selenium 中调用 Parent class 构造函数
@Test is calling Parent class constructor in TestNG Selenium
我是Java的新手,请看下面的代码
//Parent Class
public class Abc {
Abc(){System.out.println("hiii");
}
}
//Child Class
public class CDE extends Abc{
@Test
public void Xyz(){
System.out.println("hi");
}
}
Output is coming as
hiii
hi
PASSED: Xyz
请帮忙,我不确定为什么在我什至没有使用新关键字创建时调用父 class 的构造函数 object.I 已经创建了两个不同的 class如果我在子 class 中创建主要方法,即不使用 TestNG @Test 注释,Eclipse.Same 中的 es 不会发生。
这叫做构造函数链接。它通过使用继承发生。 subclass 构造方法总是调用它的 superclass 构造方法。这确保了 subclass 对象的创建从继承链中它上面的 classes 的初始化开始。
继承链中可以有任意数量的 classes。每个构造函数方法都将调用链,直到到达并初始化顶部的 class。然后下面的每个后续 class 都会随着链回落到原始子 class 进行初始化。这个过程称为构造函数链接。
当您使用来自 TestNG 的 @Test
注释时,以下是 TestNG 在幕后所做的事情。
- 它首先加载您的 class。
- 它列出了所有要 运行 的 TestNG 注释方法(例如,
@Test
、@BeforeClass
等),并以 TestNG 方式对它们进行排序(即 @BeforeSuite
、@BeforeTest
、@BeforeClass
、@Test
等等)
- 它会在您的 class 中找到一个默认构造函数。如果未找到默认构造函数,它会尝试查找采用字符串的 1 参数构造函数。
- 现在使用反射 class 实例化。
- 现在使用通过反射获得的测试实例 class,TestNG 开始按 pre-defined 顺序调用各种带注释的方法。
你的基础 class 构造函数被调用的原因是因为 TestNG 通过反射实例化你的 child class,这会触发构造函数链向上继承阶梯(哪个就是所谓的Constructor Chaining)
您可以通过向 child class CDE
添加构造函数并添加 System.out.println
来测试该理论。您将看到正在执行的打印语句。
当您通过 main()
方法执行此操作时,不涉及反射,因为不涉及 TestNG。
我是Java的新手,请看下面的代码
//Parent Class
public class Abc {
Abc(){System.out.println("hiii");
}
}
//Child Class
public class CDE extends Abc{
@Test
public void Xyz(){
System.out.println("hi");
}
}
Output is coming as
hiii
hi
PASSED: Xyz
请帮忙,我不确定为什么在我什至没有使用新关键字创建时调用父 class 的构造函数 object.I 已经创建了两个不同的 class如果我在子 class 中创建主要方法,即不使用 TestNG @Test 注释,Eclipse.Same 中的 es 不会发生。
这叫做构造函数链接。它通过使用继承发生。 subclass 构造方法总是调用它的 superclass 构造方法。这确保了 subclass 对象的创建从继承链中它上面的 classes 的初始化开始。
继承链中可以有任意数量的 classes。每个构造函数方法都将调用链,直到到达并初始化顶部的 class。然后下面的每个后续 class 都会随着链回落到原始子 class 进行初始化。这个过程称为构造函数链接。
当您使用来自 TestNG 的 @Test
注释时,以下是 TestNG 在幕后所做的事情。
- 它首先加载您的 class。
- 它列出了所有要 运行 的 TestNG 注释方法(例如,
@Test
、@BeforeClass
等),并以 TestNG 方式对它们进行排序(即@BeforeSuite
、@BeforeTest
、@BeforeClass
、@Test
等等) - 它会在您的 class 中找到一个默认构造函数。如果未找到默认构造函数,它会尝试查找采用字符串的 1 参数构造函数。
- 现在使用反射 class 实例化。
- 现在使用通过反射获得的测试实例 class,TestNG 开始按 pre-defined 顺序调用各种带注释的方法。
你的基础 class 构造函数被调用的原因是因为 TestNG 通过反射实例化你的 child class,这会触发构造函数链向上继承阶梯(哪个就是所谓的Constructor Chaining)
您可以通过向 child class CDE
添加构造函数并添加 System.out.println
来测试该理论。您将看到正在执行的打印语句。
当您通过 main()
方法执行此操作时,不涉及反射,因为不涉及 TestNG。