当前位置: 首页 > 知识库问答 >
问题:

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

施俊哲
2023-03-14

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

我创建了测试结构:XmlSuite-

我在做三件事:

  • 使用addParameter(String,String)向XmlTest添加参数

但在测试执行时发生的事情是,当它转到@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;
    }
}

结果:

Day: null
LocalParameters: {}
------------> Exception

共有1个答案

印飞捷
2023-03-14

我认为你期望做的是:

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);
    }
}
 类似资料:
  • 我使用java类从excel文件动态生成testNG xml。我使用allure-cli在测试执行结束时生成allure报告。 我正在使用maven-surefire插件进行以下配置。 当测试由maven目标和阶段触发时,我能够生成包含完整日志和屏幕截图的诱惑力报告,这些日志和屏幕截图由诱惑力注释(@step、@attachments、@Story…)附加。 但是,当java类(生成testNG

  • 我创建了一个应该创建和执行testng xml文件的类。 这将生成下一个XML文件: 执行时不执行测试用例。总测试运行:0,失败:0,跳过:0 如果我将XML作为TestNG套件运行,它就会正常工作。 值得注意的是,当手动运行它时,在控制台中我在执行测试之前: 但在执行开始前使用上面的类运行时: 但这可能是因为使用了CMD。 测试: testng版本:6.14.3 谢谢 更新 我添加了详细级别,我

  • 我试图在Eclipse中使用Selenium运行TestNG。 当类文件作为TestNG测试运行时,我得到的测试Run=0。 问题会是什么? 我有testNg插件 testng。xml文件: 类: WebDriverTest类: BrowserInstance类: 注: 当我将testing.xml文件作为TestNG Suite运行时,结果是: 当我运行. java文件作为TestNG测试时,结

  • 这是驱动程序类,它将为每个测试方法创建驱动程序实例。

  • 我试图创建一起使用JBehave和TestNG的概念验证。我想做的是在多个线程中同时运行一个故事,以测试我的代码的线程安全性。 我有一个简单的类,它只做一件事,在给定的整数值上计算模7。我已经为这个类创建了一个简单的BDD测试。我已经按照JBehave“入门”文档中的描述设置了BDD测试。唯一的区别是,在我的JUnitStory文件中,我没有使用JUnit的@Test注释,而是使用了TestNG的

  • 我有一个应用程序(使用注释的Spring 4 MVC Hibernate 4 MySQL Maven集成示例),使用基于注释的配置将Spring与Hibernate集成,但运行测试时出错! 上课时间到了 下面是即将到来的考验: 这是pom。xml文件: