Java TestNG:以编程方式运行测试-执行测试方法时,在XmlTest对象上设置的参数为空

Java TestNG:以编程方式运行测试-执行测试方法时,在XmlTest对象上设置的参数为空,java,junit,testng,Java,Junit,Testng,我想用TestNG以编程方式运行测试套件 我创建了测试结构:XmlSuite->XmlTest->TestClass(扩展了XmlClass) 我在做三件事: 使用addParameter(String,String)向XmlTest添加参数 使用setParameters(映射)将参数设置为TestClass 在TestClass中设置可变日期 但是测试执行时发生的事情是,当它转到@test method时,对象没有我之前设置的东西 代码 public class TestRunner {

我想用TestNG以编程方式运行测试套件

我创建了测试结构:XmlSuite->XmlTest->TestClass(扩展了XmlClass)

我在做三件事:

  • 使用addParameter(String,String)向XmlTest添加参数
  • 使用setParameters(映射)将参数设置为TestClass
  • 在TestClass中设置可变日期
但是测试执行时发生的事情是,当它转到@test method时,对象没有我之前设置的东西

代码

public class TestRunner {
    public static void main(String[] args) {
        XmlSuite suite = new XmlSuite();
        suite.setName("TmpSuite");

        XmlTest test = new XmlTest(suite);
        test.setName("TmpTest");
        // Add parameter to XmlTest
        test.addParameter("testParam1", "clock");

        TestClass testClass = new TestClass();

        // Add parameter to XmlClass
        Map<String, String> testClassParameters = new HashMap<>();
        testClassParameters.put("classParam1", "valueOfClassParam1");
        testClass.setParameters(testClassParameters);

        // Set day variable
        testClass.setDay("Friday");
        testClass.setClass(TestClass.class);

        test.setXmlClasses(Arrays.asList(testClass)) ;

        TestNG tng = new TestNG();
        tng.setXmlSuites(Arrays.asList(suite));

        tng.run();
    }
}

public class TestClass extends XmlClass {

    private String day;

    @Test
    public void test1() {
        System.out.println("Day: " + day);
        System.out.println("LocalParameters: " + getLocalParameters());
        System.out.println("AllParameters: " + getAllParameters());
    }

    public void setDay(String day) {
        this.day = day;
    }
}

我想你希望做的是:

public class TestRunner {
    public static void main(String[] args) {
        // Add parameter to XmlClass
        Map<String, String> testClassParameters = new HashMap<>();
        testClassParameters.put("classParam1", "valueOfClassParam1");
        testClassParameters.put("day", "Friday");

        XmlClass testClass = new XmlClass();
        testClass.setParameters(testClassParameters);
        testClass.setClass(TestClass.class);    

        XmlSuite suite = new XmlSuite();
        suite.setName("TmpSuite");

        XmlTest test = new XmlTest(suite);
        test.setName("TmpTest");
        // Add parameter to XmlTest
        test.addParameter("testParam1", "clock");
        test.setXmlClasses(Arrays.asList(testClass)) ;

        TestNG tng = new TestNG();
        tng.setXmlSuites(Arrays.asList(suite));    
        tng.run();
    }
}

public class TestClass {

    @Parameters({ "day", "testParam1", "classParam1" })
    @Test
    public void test1(String day, String testParam1, String classParam1) {
        System.out.println("Day: " + day);
        System.out.println("testParam1: " + testParam1);
        System.out.println("classParam1: " + classParam1);
    }
}
公共类TestRunner{
公共静态void main(字符串[]args){
//向XmlClass添加参数
Map testClassParameters=newhashmap();
testClassParameters.put(“classParam1”、“valueOfClassParam1”);
testClassParameters.put(“日”、“星期五”);
XmlClass testClass=新的XmlClass();
setParameters(testClassParameters);
setClass(testClass.class);
XmlSuite=newxmlsuite();
套件名称(“TmpSuite”);
XmlTest=新的XmlTest(套件);
测试集名称(“TmpTest”);
//将参数添加到XmlTest
test.addParameter(“testParam1”、“时钟”);
setXmlClasses(Arrays.asList(testClass));
TestNG tng=新的TestNG();
tng.setXmlSuites(Arrays.asList(suite));
tng.run();
}
}
公共类TestClass{
@参数({“day”、“testParam1”、“classParam1”})
@试验
public void test1(String day、String testParam1、String classParam1){
System.out.println(“天:+天);
System.out.println(“testParam1:+testParam1”);
System.out.println(“classParam1:+classParam1”);
}
}

是的,有点类似。但对于抽象的TestClass,参数编号可能会有所不同。最好将Map作为参数传递,但只能传递字符串。我希望TestClass包含不同的对象,这些对象在执行时不会为null。如果愿意,您可以插入
ITestContext
,但我不知道如何轻松找到类参数,因为ITestContext提供了view.TestClass.setParameters(testClassParameters);为我提供编译错误setParameteres未为testClass定义。@KaranAhuja更新您的testng版本。我想你用的是一个很旧的。谢谢你的回复。我在测试NG-6.7,我应该升级吗?同时,我找到了一个xmlTest.addParameter(“fromMonth”、“一月”)的解决方案;setParameters(suiteParameters);我是从谷歌集团找到的。
public class TestRunner {
    public static void main(String[] args) {
        // Add parameter to XmlClass
        Map<String, String> testClassParameters = new HashMap<>();
        testClassParameters.put("classParam1", "valueOfClassParam1");
        testClassParameters.put("day", "Friday");

        XmlClass testClass = new XmlClass();
        testClass.setParameters(testClassParameters);
        testClass.setClass(TestClass.class);    

        XmlSuite suite = new XmlSuite();
        suite.setName("TmpSuite");

        XmlTest test = new XmlTest(suite);
        test.setName("TmpTest");
        // Add parameter to XmlTest
        test.addParameter("testParam1", "clock");
        test.setXmlClasses(Arrays.asList(testClass)) ;

        TestNG tng = new TestNG();
        tng.setXmlSuites(Arrays.asList(suite));    
        tng.run();
    }
}

public class TestClass {

    @Parameters({ "day", "testParam1", "classParam1" })
    @Test
    public void test1(String day, String testParam1, String classParam1) {
        System.out.println("Day: " + day);
        System.out.println("testParam1: " + testParam1);
        System.out.println("classParam1: " + classParam1);
    }
}