目录
那么,这个带@BeforeTest注释的方法什么时候执行呢?
但是如果我们在两个类中都保留@BeforeTest注释的方法会发生什么呢?
下一个问题是,如果将@BeforeTest注释放在超类上,它将如何工作?
在这篇文章中,我们将学习TestNG中的@BeforeTest注释。它有什么用?以及如何使用它?
TestNG中的@BeforeTest注解有什么用?@BeforeTest注释用于执行测试用例所需的一些先决条件任务,例如准备一些测试数据。
下面的XML将有助于理解执行点。
<suite name="codekru">
<test name="codekru"> <!-- @BeforeTest will execute here -->
<classes> <!-- @BeforeClass will execute here -->
<class name="Test.CodekruTestFirst" />
<class name="Test.CodekruTestSecond" />
</classes>
</test>
</suite>
因此,@BeforeTest注释方法将在test标记之前执行。我们可以在test/test标记中提到的任何类中定义@BeforeTest注释方法。
package Test;
import org.testng.Assert;
import org.testng.annotations.BeforeTest;
import org.testng.annotations.Test;
public class CodekruTestFirst {
@BeforeTest
public void beforeTest() {
System.out.println("before test method in CodekruTestFirst class");
}
@Test
public void test() {
System.out.println("Executing the test in CodekruTestFirst class");
Assert.assertTrue(true);
}
}
package Test;
import org.testng.Assert;
import org.testng.annotations.Test;
public class CodekruTestSecond {
@Test
public void test() {
System.out.println("Executing the test in CodekruTestSecond class");
Assert.assertTrue(true);
}
}
现在,我们将运行下面的testng.xml文件,看看会发生什么
<suite name="codekru">
<test name="codekru"> <!-- @BeforeTest will execute here -->
<classes>
<class name="Test.CodekruTestFirst" />
<class name="Test.CodekruTestSecond" />
</classes>
</test>
</suite>
产出-
before test method in CodekruTestFirst class
Executing the test in CodekruTestFirst class
Executing the test in CodekruTestSecond class
===============================================
codekru
Total tests run: 2, Failures: 0, Skips: 0
让我们也在CodekruTestSecond类中保留@BeforeTest注释方法。
package Test;
import org.testng.Assert;
import org.testng.annotations.BeforeTest;
import org.testng.annotations.Test;
public class CodekruTestSecond {
@BeforeTest
public void beforeTest() {
System.out.println("before test method in CodekruTestSecond class");
}
@Test
public void test() {
System.out.println("Executing the test in CodekruTestSecond class");
Assert.assertTrue(true);
}
}
现在,我们将运行与前面相同的testng.xml文件,看看现在会发生什么。
before test method in CodekruTestFirst class
before test method in CodekruTestSecond class
Executing the test in CodekruTestFirst class
Executing the test in CodekruTestSecond class
===============================================
codekru
Total tests run: 2, Failures: 0, Skips: 0
因此,我们可以看到这两个带注释的方法都在套件中的测试用例实际执行之前运行。
class CodekruTest{
@BeforeTest
public void beforeTest() {
System.out.println("beforeTest method in superclass");
}
}
public class CodekruTestSubclass extends CodekruTest{
@Test()
public void test() {
System.out.println("Executing the test in subclass");
Assert.assertTrue(true);
}
}
下面是相同的XML,我们将只执行子类。
<suite name="codekru">
<test name="codekruTest">
<classes>
<class name="Test.CodekruTestSubclass">
</class>
</classes>
</test>
</suite>
产出-
beforeTest method in superclass
Executing the test in subclass
在这里,您可以看到超类中的beforeTest()方法在子类的case之前执行。这是因为子类继承了超类的方法,但是如果我们将beforeTest()方法设置为私有,那么它就不会被执行,因为子类不会继承它。