Reputation: 760
When using TestNG, If multiple test classes inherit a class containing a @BeforeTest method, will it run only once or everytime when each of the classes are called in the test case?
When I run the below code, the text "BEFORE TEST EXECUTED" is printed only once. Though both the test classes have this method inherited.
public class masterclass
{
@BeforeTest
public void show()
{
sout("BEFORE TEST EXECUTED")
}
}
Test Class-1:
public class TestClass1 extends masterclass
{
@Test
public void testA1() { }
}
Test Class-2:
public class TestClass2 extends masterclass
{
@Test
public void testB1() {}
}
XML of the test Case :
<suite name="testSuite">
<test name="MytestCase" >
<classes>
<class name="com.ui.test.TestClass1" />
<class name="com.ui.test.TestClass2" />
</classes>
</test>
</suite>
Upvotes: 0
Views: 1328
Reputation: 2881
In your case, @BeforeTest
will run one time. It will see to Testng.xml
and will run before all test cases under <test>
tag.
Master Test Class:
public class MasterClass {
@BeforeTest
public void show()
{
System.out.println("BEFORE TEST EXECUTED");
}
}
Test Class-1:
public class TestClass1 extends MasterClass{
@Test
public void test()
{
System.out.println("Priority 0 (Default in Class 1)");
}
}
Test Class-2:
public class TestClass2 extends MasterClass{
@Test(priority = 0)
public void testin_LearningTestNGTest2_Class()
{
System.out.println("Priority 0 (Class 2)");
}
}
TestNG.xml:
<suite name="testSuite">
<test name="MytestCase">
<classes>
<class name="com.ui.test.TestClass1" />
<class name="com.ui.test.TestClass2" />
</classes>
</test>
</suite>
Output:
BEFORE TEST EXECUTED
Priority 0 (Default in Class 1)
Priority 0 (Class 2)
Hope it will help you.
Upvotes: 3