TestNG 如何从@BeforeClass中获取当前类名
TestNG支持本地依赖注入。它允许在方法中声明额外的参数。在运行时,TestNG会自动填充这些参数的正确值。以下是TestNG中的一些本地依赖项:
- ITestContext
-
XmlTest
-
Method
-
ITestResult
这些依赖项有助于根据调用它们的位置来检索测试类名。如果用户希望在执行之前检索测试类名,最好的位置是@BeforeClass。
@BeforeClass支持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
当用户希望在执行之前检索测试类的名称时。在这种情况下,代码将被写在@BeforeClass中以检索将要执行的当前类名。
由于@BeforeClass最先执行,所以在任何测试方法执行之前,类名将会被打印出来。
步骤
- 步骤1:创建一个TestNG类 – NewTestngClass
-
步骤2:在类的@BeforeClass中编写以下代码;
public void name(ITestContext context) {
System.out.println("in beforeclass 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());
}
-
第一行将打印我们所在的类。它是硬编码的。
-
代码的第二行将在运行时使用ITestContext依赖项打印测试类名。
-
代码的第三行将在运行时打印不使用任何依赖项的测试类名。
- 步骤3:现在创建以下testNG.xml以运行TestNG类。
-
步骤4:现在,在IDE中运行testNG.xml或直接运行testNG类,或者使用命令行进行编译和运行。
示例
以下是普通TestNG类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");
}
@BeforeClass
public void name(ITestContext context) {
System.out.println("in beforeclass 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 beforeclass of NewTestngClass
Test Class name using ITestContext is: NewTestngClass
Test Class name without using ITestContext is: NewTestngClass
in test case 1 of NewTestngClass
in test case 2 of NewTestngClass
===============================================
Suite1
Total tests run: 2, Passes: 2, Failures: 0, Skips: 0
===============================================