Kuba
Kuba

Reputation: 372

TestNG: Running test programmatically - parameters set on XmlTest object are null when executing test method

I want to run Test Suite programmatically with TestNG.

I created test structurde: XmlSuite -> XmlTest -> TestClass (which extends XmlClass)

I'm doing three things:

But what happens on test execution is when it goes to @Test method the object doesn't have things which I set before.

Code

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;
    }
}

Result:

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

Upvotes: 1

Views: 5120

Answers (1)

juherr
juherr

Reputation: 5740

I think what you are expecting to do is:

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);
    }
}

Upvotes: 2

Related Questions