如何在 TestNG 的 BeforeClass 中獲取當前類名?
TestNG 支援原生依賴注入。它允許在方法中宣告額外的引數。在執行時,TestNG 會自動使用正確的值填充這些引數。以下是 TestNG 中的一些原生依賴項
ITestContext
XmlTest
Method
ITestResult
這些依賴項有助於根據呼叫位置檢索測試類名。如果使用者希望在執行之前檢索測試類名,最好的位置是 @BeforeClass。
@BeforeClass 支援 ITestContext 和 XmlTest。
但是,這些依賴項的完整訪問許可權如下所示
註解 |
ITestContext |
XmlTest |
Method |
ITestResult |
|---|---|---|---|---|
BeforeSuite |
是 |
否 |
否 |
否 |
BeforeTest |
是 |
是 |
否 |
否 |
BeforeGroups |
是 |
是 |
否 |
否 |
BeforeClass |
是 |
是 |
否 |
否 |
BeforeMethod |
是 |
是 |
是 |
是 |
Test |
是 |
否 |
否 |
否 |
AfterMethod |
是 |
是 |
是 |
是 |
AfterClass |
是 |
是 |
否 |
否 |
AfterGroups |
是 |
是 |
否 |
否 |
AfterTest |
是 |
是 |
否 |
否 |
AfterSuite |
是 |
否 |
否 |
否 |
在本文中,我們將使用 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:現在,執行 testNG.xml 或直接在 IDE 中執行 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 ===============================================
資料結構
網路
關係型資料庫管理系統
作業系統
Java
iOS
HTML
CSS
Android
Python
C 程式設計
C++
C#
MongoDB
MySQL
Javascript
PHP