TestNG @AfterClass 注解

目录

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

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

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


在这篇文章中,我们将讨论TestNG中的@AfterClass注释。@AfterClass注释的方法将在特定类中的所有测试用例运行后运行。这可以帮助我们在运行了一个类中的所有测试用例之后进行一些清理或重置活动。

那么,这个@AfterClass注释的方法什么时候执行呢?
<suite name="codekru">
    <test name="codekru">
        <classes>
            <class name="Test.CodekruTestFirst"> <!-- @BeforeClass method of CodekruTestFirst class will execute here -->
                <methods>
                    <include name="testMethod" />
                </methods>
            </class>  <!-- @AfterClass method of CodekruTestFirst class will execute here -->
            <class name="Test.CodekruTestSecond">  <!-- @BeforeClass method of CodekruTestSecond class will execute here -->
                <methods>
                    <include name="testMethod" />
                </methods>
            </class> <!-- @AfterClass method of CodekruTestSecond class will execute here -->
        </classes>
    </test>
</suite>

现在,我们将采用两个类(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文件

<!DOCTYPE suite SYSTEM "https://testng.org/testng-1.0.dtd" >
 
<suite name="codekru">
    <test name="codekru">
        <classes>
            <class name="Test.CodekruTestFirst">
                <methods>
                    <include name="testMethod" />
                </methods>
            </class>  <!-- @AfterClass method of CodekruTestFirst class will execute here -->
            <class name="Test.CodekruTestSecond">
                <methods>
                    <include name="testMethod" />
                </methods>
            </class> <!-- @AfterClass method of CodekruTestFirst class will execute here -->
        </classes>
    </test>
</suite>

产出-

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类。

<suite name="codekru">
    <test name="codekruTest">
        <classes>
            <class name="Test.CodekruTestSecond" />
        </classes>
    </test>
</suite>

运行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下面运行,看看会发生什么。

<suite name="codekru">
    <test name="codekru">
        <classes>
            <class name="Test.CodekruTestSubclass" />
        </classes>
    </test>
</suite>

产出-

Executing the subclass test
afterClassMethod called

===============================================
codekru
Total tests run: 1, Passes: 1, Failures: 0, Skips: 0

因此,即使afterClassMethod存在于超类中,它也会被执行。这是因为afterClassMethod被子类继承了。但是,如果我们将afterClassMethod设置为私有,它将不会运行,因为私有方法不能被子类继承。

相关推荐

  1. SpringBoot注解

    2024-01-25 07:42:02       69 阅读
  2. 【Scala 】注解

    2024-01-25 07:42:02       55 阅读
  3. @Conditional注解

    2024-01-25 07:42:02       49 阅读
  4. Spring--注解

    2024-01-25 07:42:02       35 阅读
  5. SpringBoot注解

    2024-01-25 07:42:02       47 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-01-25 07:42:02       94 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-01-25 07:42:02       100 阅读
  3. 在Django里面运行非项目文件

    2024-01-25 07:42:02       82 阅读
  4. Python语言-面向对象

    2024-01-25 07:42:02       91 阅读

热门阅读

  1. wy的leetcode刷题记录_Day76

    2024-01-25 07:42:02       58 阅读
  2. Leetcode刷题(二十九)

    2024-01-25 07:42:02       59 阅读
  3. toggle封装

    2024-01-25 07:42:02       62 阅读
  4. SpringBoot-SpringBoot自动配置底层源码解析

    2024-01-25 07:42:02       44 阅读
  5. 使用django-admin来做erp,是否需要使用缓存数据库

    2024-01-25 07:42:02       57 阅读
  6. 数据结构练习3

    2024-01-25 07:42:02       47 阅读
  7. 江苏服务器租用要注意哪些方面?

    2024-01-25 07:42:02       55 阅读
  8. html 粒子效果文字特效

    2024-01-25 07:42:02       60 阅读
  9. Hadoop-MapReduce-源码跟读-客户端篇

    2024-01-25 07:42:02       43 阅读
  10. CentOS 安装 Ruby

    2024-01-25 07:42:02       61 阅读
  11. VSCode Python调试运行:json编写

    2024-01-25 07:42:02       47 阅读