目录
那么,这个@AfterClass注释的方法什么时候执行呢?
那么,我们可以在一个类中放置多个@AfterClass注释方法吗?
@AfterClass注释放在超类上时如何工作?
在这篇文章中,我们将讨论TestNG中的@AfterClass注释。@AfterClass注释的方法将在特定类中的所有测试用例运行后运行。这可以帮助我们在运行了一个类中的所有测试用例之后进行一些清理或重置活动。
现在,我们将采用两个类(CodekruTestFirst和CodekruTestSecond),并在每个类中保留一个带@AfterClass注释的方法。
CodekruTestFirst.java
package Test;
import org.testng.Assert;
import org.testng.annotations.AfterClass;
import org.testng.annotations.Test;
public class CodekruTestFirst {
@AfterClass
public void afterClass() {
System.out.println("afterClass method in CodekruTestFirst class");
}
@Test
public void testMethod() {
System.out.println("Executing the test in CodekruTestFirst class");
Assert.assertTrue(true);
}
}
CodekruTestSecond.java
package Test;
import org.testng.Assert;
import org.testng.annotations.AfterClass;
import org.testng.annotations.Test;
public class CodekruTestSecond {
@AfterClass
public void afterClass() {
System.out.println("afterClass method in CodekruTestSecond class");
}
@Test
public void testMethod() {
System.out.println("Executing the test in CodekruTestSecond class");
Assert.assertTrue(true);
}
}
现在,我们将运行下面的XML文件
产出-
Executing the test in CodekruTestFirst class
afterClass method in CodekruTestFirst class
Executing the test in CodekruTestSecond class
afterClass method in CodekruTestSecond class
===============================================
codekru
Total tests run: 2, Failures: 0, Skips: 0
这里发生了什么
是的,我们可以在一个类中放置多个@AfterClass注释的方法,然后所有这些注释的方法都将在该类的所有测试用例执行后运行。让我们看一个例子。
import org.testng.Assert;
import org.testng.annotations.AfterClass;
import org.testng.annotations.Test;
public class CodekruTestSecond {
@AfterClass
public void afterClass1() {
System.out.println("in afterClass1 method");
}
@AfterClass
public void afterClass2() {
System.out.println("in afterClass2 method");
}
@Test
public void testMethod() {
System.out.println("Executing the test in CodekruTestSecond class");
Assert.assertTrue(true);
}
}
我们将运行下面的XML文件来执行CodekruTestSecond类。
运行XML文件后的输出-
Executing the test in CodekruTestSecond class
in afterClass1 method
in afterClass2 method
===============================================
codekru
Total tests run: 1, Passes: 1, Failures: 0, Skips: 0
让我们通过一个例子来看看这个问题。
package Test;
import org.testng.Assert;
import org.testng.annotations.AfterClass;
import org.testng.annotations.Test;
class CodekruTest {
@AfterClass
public void afterClassMethod() {
System.out.println("afterClassMethod called");
}
}
public class CodekruTestSubclass extends CodekruTest {
@Test()
public void test() {
System.out.println("Executing the subclass test");
Assert.assertTrue(true);
}
}
现在,我们将在testng.xml下面运行,看看会发生什么。
产出-
Executing the subclass test
afterClassMethod called
===============================================
codekru
Total tests run: 1, Passes: 1, Failures: 0, Skips: 0
因此,即使afterClassMethod存在于超类中,它也会被执行。这是因为afterClassMethod被子类继承了。但是,如果我们将afterClassMethod设置为私有,它将不会运行,因为私有方法不能被子类继承。