我有一个TestNG文件demo.java和一个侦听器DemoListener.java

Demo.java

import org.testng.*;
@Listeners(DemoListener.class)
public class Demo{
public static String testName = "DemoName"

@Test(priority = 1)
public void demoTest() {
    Assert.assertEquals(some_value,value, "message");
  }
}


DemoListener.java

import org.testng.ITestListener;
Public class DemoListener implements ITestListener {

@Override
public void onTestSuccess(ITestResult arg0) {
    System.out.println("On test Success:- ");
    // Here I want to access **variable(testName)** declared in Demo class.
    // Or is there anyway that I can pass that variable.
  }
}


现在,我想在每次测试执行后访问在DemoListener类的Demo类中声明的testName变量。我会在DemoListener中声明它,但是我有很多类似Demo的类,并且每个文件都有不同的testName。

感谢你的帮助!

最佳答案

我不确定您为什么要这么做,也许有一点背景会有所帮助。

但是,要回答这个问题,您有几种选择:


在TestNG的XML中定义变量。如果将其放在属性构造中,则System.getProperty()将可以使用它。
由于testName是公共静态变量,因此您可以简单地在Demo.testName中引用DemoListener


我有点困惑为什么您不能简单地使用ITestResult.getName() ...

编辑:为清楚起见,在您的Demo.java中,每种方法都可以执行以下操作:

ITestResult tr = Reporter.getCurrentTestResult();
tr.setName( "whatever name you want to give your test step" );


然后,您可以进行其余的测试(断言等)。稍后,在DemoListener.java中,您已经传递了一个ITestResult实例,您可以通过调用arg0.getName()来简单地询问它的名称(在上面的代码中设置的名称)。

09-27 03:17