selenium:覆盖超类中的setUp方法并调用super super方法

时间:2014-09-19 17:44:26

标签: java selenium selenium-webdriver testng

我的SuperTest类中有一个setUp()。现在在我的ChildTest类中,我想设置另一个setUp()。这个将专门针对ChildTest运行。

所以我目前有这个

    //SuperClass
    protected void setUp(ITestContext context) {
        ...
    }

    //SubClass extends SuperClass
    @BeforeMethod
    protected void setUp(ITestContext context) {
        super.setUp(context);
        ...
    }

    //ChildClass extends SubClass
    @Override
    @BeforeMethod
    protected void setUp(ITestContext context) {
        super.setUp(context);
        ...
    }

问题是,当我运行ChildTest时,它运行来自SubClass的setUp()并且它自己...我怎么能得到它所以它只会运行它自己的setUp()?

2 个答案:

答案 0 :(得分:0)

不,它不应该同时运行两种设置方法,如果你已经扩展了父类并遵循了overriding方法的所有规则,那么你的父类方法就不会被执行了。请考虑以下情形。我有两个TestNG类,Abc作为父类,Def作为子类

public class Abc{

@BeforeMethod
public void beforeMethod(ITestContext context) {
    System.out.println("PARENT");
}

}

public class Def extends Abc{

@BeforeMethod
public void beforeMethod(ITestContext context) {
    System.out.println("CHILD");
}

@Test
public void test(){
    System.out.println("TEST");
}

}

现在,如果我将Def类作为TestNg Test执行,它肯定会执行子类的beforeMethod,然后执行子类的测试方法

答案 1 :(得分:0)

参考这个答案:https://stackoverflow.com/a/3456599

我最后在SubClass中添加了一个调用SuperClass的setUp

的方法
    //SubClass extends SuperClass
    protected void getSuperSuper((ITestContext context) {
        super.setUp(context);
    }

    //ChildClass extends SubClass
    protected void setUp(ITestContext context) {
        super.getSuperSuper(context);
        ...
    }