TestNG @AfterClass 注解

目录

那么,这个@AfterClass注释的方法什么时候执行呢?

那么,我们可以在一个类中放置多个@AfterClass注释方法吗?

@AfterClass注释放在超类上时如何工作?


在这篇文章中,我们将讨论TestNG中的@AfterClass注释。@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

这里发生了什么 

  • 默认情况下,TestNG将按照XML文件中的顺序运行测试。&因此,它获取了CodekruTestFirst类,运行了它的test方法,然后运行了它的@AfterClass注释方法。
  • 在那之后,它去了CodekruTestSecond类,运行了它的测试用例,然后是它的@AfterClass注释方法。
那么,我们可以在一个类中放置多个@AfterClass注释方法吗?

是的,我们可以在一个类中放置多个@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
@AfterClass注释放在超类上时如何工作?

让我们通过一个例子来看看这个问题。

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设置为私有,它将不会运行,因为私有方法不能被子类继承。

你可能感兴趣的:(unit,testing)