gpt4 book ai didi

java - 如何获取 TestNG 监听器所作用的类的名称?

转载 作者:太空宇宙 更新时间:2023-11-04 07:25:30 25 4
gpt4 key购买 nike

您好,我有一个简单的 testNG 项目,其中有一个 SampleTest.java 类文件,其中有 2 个测试用例,并且我向其中添加了一个名为 MyListener 的监听器。为此,我有一个 MyListener.java 类文件,它扩展了 TestNG 的 TestListener,其中我根据测试用例的执行打印通过或失败或跳过。因此,每次我运行 SampleTest 时,我都可以在控制台中看到通过/失败。但我希望它带有类名

我的问题陈述是,我如何在 MyListener 类中获取测试用例文件名(即此处的 Sampletest)???我尝试使用 stacktrace 但没有帮助..因为我猜它没有被调用,但它只是作用于/监听文件中的测试用例..请让我知道如何在监听器中获取该类的名称???

SampleTest.java:

package com.abc;

import org.testng.annotations.Listeners;
import org.testng.annotations.Test;
@Listeners({ com.mindtree.MyListener.class})
public class SampleTest {

@Test
public void SampleTest() throws Exception{
System.out.println("Hello world");
}
@Test
public void SampleTest1() throws Exception{
System.out.println("Hello Swarna");
}
}

MyListener.java:

package com.abc;

import org.testng.ITestResult;
import org.testng.TestListenerAdapter;

public class MyListener extends TestListenerAdapter {

private int m_count = 0;

@Override
public void onTestFailure(ITestResult tr) {
log("Fail");
}

@Override
public void onTestSkipped(ITestResult tr) {
log("Skipped");
}

@Override
public void onTestSuccess(ITestResult tr) {
log("\nSuccess\n");
## WANT TO PRINT HERE THE TESTCASE CLASS NAME
}

private void log(String string) {
System.out.print(string);
if (++m_count % 40 == 0) {
System.out.println("");
}
}

}

但不适用于多个测试用例文件。只需在 MyListener 中创建 SampleTest 对象,通过 getter 和 setter 访问类名

最佳答案

根据您的描述,我了解您想要获取 @Test 注释的测试方法所在的类的名称,并且仅获取不带包名称的类名称

在您的情况下,输出将是:“SampleTest”。

您可以通过以下方式实现此目的:

public void onTestSuccess(ITestResult tr) {
log("\nSuccess\n");
String className = tr.getTestClass().getRealClass().getSimpleName()
log(className);
}

@JacekM 的解决方案也可以正常工作,但在您的情况下将返回“com.abc.SampleTest”

关于java - 如何获取 TestNG 监听器所作用的类的名称?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18610402/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com