tags:

views:

169

answers:

1

For my tests I'm using a base class MyTestBase defining a method setup() that does some base preparations:

public class MyTestBase {
    @Configuration( beforeTestMethod=true )
    protected void setup() {
        // do base preparations
    }
}

Now I have some more specific test classes that have to do their own preparations. There are different ways how to implement this.

I could use @Override:

public class MySpecialTestBase extends MyTestBase {
    @Override
    protected void setup() {
        super.setup();
        // do additional preparations
    }
}

...or I could use a separate setup method:

public class MySpecialTestBase extends MyTestBase {
    @Configuration( beforeTestMethod=true )
    protected void setupSpecial() {
        // do additional preparations
    }
}

Is there a prefered way to implement this?

+2  A: 

I would prefer using @Configuration annotation. @Override and super are more fragile. You can forget to call super.setup(), or call it in wrong place. Meanwhile, using separate method with @Configuration lets you to choose more appropriate naming for child setup method if necessary, and you get setup order guaranteed by TestNG (parent then child).

Two more points:

  1. I'd make parent setup final in order to forbid accidental overriding.
  2. I'd use @BeforeMethod annotations. They are available since TestNG 5.0. Of course, for older versions you forced to using @Configuration.
Rorick
Thanks for your answer.
tangens