Back

Explore Courses Blog Tutorials Interview Questions
0 votes
2 views
in DevOps and Agile by (19.7k points)

As we know from official TestNG documentation:

@BeforeClass: The annotated method will be run before the first test method in the current class is invoked.

@BeforeTest: The annotated method will be run before any test method belonging to the classes inside the <test> tag is run.

Both the above TestNG annotations look similar in functionality. However, there should be a unique difference in the feature. Can anyone please emphasize this?

1 Answer

+1 vote
by (62.9k points)

SeleniumAbstractTest.class

 public abstract class SeleniumAbstractTest {

  @BeforeSuite

  public void beforeSuite() {

    System.out.println("BeforeSuite");

  }

  @BeforeTest

  public void beforeTest() {

    System.out.println("BeforeTest");

  }

  @BeforeClass

  public void beforeClass() {

    System.out.println("BeforeClass");

  }

  @BeforeMethod

  public void beforeMethod() {

    System.out.println("BeforeMethod");

  }

  @AfterMethod

  public void afterMethod() {

    System.out.println("AfterMethod");

  }

  @AfterClass

  public void afterClass() {

    System.out.println("AfterClass");

  }

  @AfterTest

  public void afterTest() {

    System.out.println("AfterTest");

  }

  @AfterSuite

  public void afterSuite() {

    System.out.println("AfterSuite");

  }

}

MyTestClass1.class

public class MyTestClass1 extends SeleniumAbstractTest {

 

  @Test

  public void myTestMethod1() {

    System.out.println("myTestMethod1");

  }

 

  @Test

  public void myTestMethod2() {

    System.out.println("myTestMethod2");

  }

}

MyTestClass2.class

public class MyTestClass2 extends SeleniumAbstractTest {

 

  @Test

  public void myTestMethod3() {

    System.out.println("myTestMethod3");

  }

 

  @Test

  public void myTestMethod4() {

    System.out.println("myTestMethod4");

  }

}

If you have the following Test Suite...

<suite name="Suite">

  <test name="Test1" >

    <classes>

       <class name="MyTestClass2" />

    </classes>

  </test>

 

  <test name="Test2">

    <classes>

      <class name="MyTestClass1"/>

      <class name="MyTestClass2"/>

    </classes>

  </test>

</suite>

... then the output [indented for easy reading] will be

 BeforeSuite

'   BeforeTest

'   ' BeforeClass

'   ' '   BeforeMethod

'   ' '   ' myTestMethod3

'   ' '   AfterMethod

'   ' '   BeforeMethod

'   ' '   ' myTestMethod4

'   ' '   AfterMethod

'   ' AfterClass

'   AfterTest

'   BeforeTest

'   ' BeforeClass

'   ' '   BeforeMethod

'   ' '   ' myTestMethod1

'   ' '   AfterMethod

'   ' '   BeforeMethod

'   ' '   ' myTestMethod2

'   ' '   AfterMethod

'   ' AfterClass

'   ' BeforeClass

'   ' '   BeforeMethod

'   ' '   ' myTestMethod3

'   ' '   AfterMethod

'   ' '   BeforeMethod

'   ' '   ' myTestMethod4

'   ' '   AfterMethod

'   ' AfterClass

'   AfterTest

AfterSuite

Browse Categories

...