@Test在TestNG Selenium

时间:2017-08-18 18:17:53

标签: java selenium selenium-webdriver testng-eclipse

我是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

请帮助,我不知道为什么在我甚至没有使用新的关键字创建对象时调用父类的构造函数。我在Eclipse中创建了两个不同的类。如果我创建main,则不会发生这种情况子类中的方法,即不使用TestNG @Test注释。

2 个答案:

答案 0 :(得分:0)

它叫做Constructor Chaining。它通过使用继承来实现。子类构造函数方法的ALWAYS调用其超类的构造函数方法。这确保了子类对象的创建始于继承链中它上面的类的初始化。

继承链中可能有任意数量的类。每个构造函数方法都将调用链,直到达到并初始化顶部的类。然后,当链条回到原始子类时,下面的每个后续类都被初始化。此过程称为构造函数链接。

您可以参考https://www.thoughtco.com/constructor-chaining-2034057

答案 1 :(得分:0)

当你使用TestNG的@Test注释时,这就是TestNG在幕后所做的事情。

  • 首先加载你的课程。
  • 它列出了要运行的所有TestNG注释方法(例如,@Test@BeforeClass等),并以TestNG方式对它们进行排序(即{{1} },@BeforeSuite@BeforeTest@BeforeClass等等)
  • 它会在您的类中找到默认构造函数。如果没有找到默认构造函数,它会尝试查找带有字符串的1参数构造函数。
  • 使用反射现在可以实例化类。
  • 现在使用通过反射获得的测试类的实例,TestNG开始以预定义的顺序调用各种带注释的方法。

你的基类构造函数被调用的原因是由于TestNG通过反射实例化你的子类,这会触发构造函数链上传继承阶梯(这就是所谓的构造函数链接

您可以通过向子类@Test添加构造函数并添加CDE来测试此理论。您将看到正在执行的print语句。

当您通过System.out.println方法执行此操作时,不会涉及任何反射,因为不涉及TestNG。