TestNG 如何从AfterClass获取当前类名
TestNG支持本地依赖注入。它允许在方法中声明额外的参数。在运行时,TestNG会自动填充这些参数的正确值。以下是TestNG中的一些本地依赖项:
- ITestContext
-
XmlTest
-
Method
-
ITestResult
这些依赖项有助于根据调用它们的位置来检索测试类名。如果用户希望在执行后检索测试类名,最好的位置是@AfterClass。
@AfterClass支持ITestContext和XmlTest。
但是,这些依赖项的完全访问如下所示:
Annotation | ITestContext | XmlTest | Method | ITestResult |
---|---|---|---|---|
BeforeSuite | Yes | No | No | No |
BeforeTest | Yes | Yes | No | No |
BeforeGroups | Yes | Yes | No | No |
BeforeClass | Yes | Yes | No | No |
BeforeMethod | Yes | Yes | Yes | Yes |
Test | Yes | No | No | No |
AfterMethod | Yes | Yes | Yes | Yes |
AfterClass | Yes | Yes | No | No |
AfterGroups | Yes | Yes | No | No |
AfterTest | Yes | Yes | No | No |
AfterSuite | Yes | No | No | No |
在本文中,我们将使用ITestContext依赖项来展示如何检索测试类名称,而无需使用任何依赖项。
场景1
当用户想要在执行后检索测试类的名称时。在这种情况下,将在@AfterClass中编写代码以检索将要执行的当前类名。
由于@AfterClass在最后执行,所以在执行任何类后,类名将被打印出来。
步骤
- 步骤1:创建一个TestNG类 – NewTestngClass
-
步骤2:在类中的@AfterClass中编写以下代码;
public void name(ITestContext context) {
System.out.println("在NewTestngClass的Afterclass中");
System.out.println("使用ITestContext获取测试类名称:"+context.getCurrentXmlTest().getClasses().stream().findFirst().get().getName());
System.out.println("不使用ITestContext获取测试类名称:"+this.getClass().getName());
}
-
第一行将打印我们所在的类。这是硬编码的。
-
代码的第二行将使用ITestContext依赖项在运行时打印测试类名。
-
代码的第三行将在运行时打印测试类名,而不使用任何依赖项。
- 步骤3:现在创建如下的testNG.xml以运行TestNG类。
-
步骤4:现在,在IDE中运行testNG.xml或直接运行testNG类,或者使用命令行编译并运行它。
示例
以下是通用TestNG类NewTestngClass的代码−NewTestngClass:
src/NewTestngClass.java
import org.testng.ITestContext;
import org.testng.annotations.*;
public class NewTestngClass {
// test case 1
@Test()
public void testCase1() {
System.out.println("in test case 1 of NewTestngClass");
}
// test case 2
@Test()
public void testCase2() {
System.out.println("in test case 2 of NewTestngClass");
}
@AfterClass
public void name(ITestContext context) {
System.out.println("in Afterclass of NewTestngClass");
System.out.println("Test Class name using ITestContext is:"+context. getCurrentXmlTest().getClasses().stream().findFirst().get().getName());
System.out.println("Test Class name without using ITestContext is:"+this.getClass().getName());
}
}
testng.xml
这是一个配置文件,用于组织和运行TestNG测试用例。
当只需要执行有限的测试而不是完整套件时,它非常方便。
<?xml version = "1.0" encoding = "UTF-8"?>
<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd" >
<suite name = "Suite1" parallel = "none">
<test name = "test1" preserve-order = "true">
<classes>
<class name = "NewTestngClass"/>
</classes>
</test>
</suite>
输出
in test case 1 of NewTestngClass
in test case 2 of NewTestngClass
Test Class name using ITestContext is: NewTestngClass
in Afterclass of NewTestngClass
Test Class name without using ITestContext is: NewTestngClass
===============================================
Suite1
Total tests run: 2, Passes: 2, Failures: 0, Skips: 0
===============================================