lundi 6 juillet 2015

Super classes are instatiated multiple times when test packages are executed using TestNG

I am seeing a behavior with TestNG which I am not sure is correct. I have two classes 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");
    }
}

Class 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");
    }
}

These classes are placed under com.test package

Now when I execute ClassA.java as a TestNG test from eclipse I get below output :

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

If I execute same code by selecting com.test package I seeing below output :

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

Basically, ClassB is getting instantiated twice when executed as a testNg package as ClassB contains @BeforeClass annotation, This is making my code to fail with Null pointer exceptions.

Am i missing any thing here ?

Thanks CG

Aucun commentaire:

Enregistrer un commentaire