2016-04-22 2 views
1

Есть ли способ запустить тест TestNG из другого класса Java.Запуск теста TestNG из другого класса

@Test 
public void f(Integer n, String s) { 
} 

мне нужно запустить один и тот же метод в одном наборе с различными аргументами. (Внутри цикл)

Возможно ли это?

Кроме того, я вижу, что метод датаподавателя должен возвращать Object[][]. Это отлично подходит для методов с двумя аргументами. Можем ли мы отправить более двух аргументов?

@DataProvider 
public Object[][] dp() { 
    return new Object[][] { new Object[] { 1, "a" }, new Object[] { 2, "b" }, }; 
} 

@Test(dataProvider = "dp") 
public void f(Integer n, String s, char c, double d, String s2) { 
} 

Я пытаюсь сделать это с помощью некоторых TestNG классов

public static void main(String[] args) { 

    List<XmlClass> classes = new ArrayList<>(); 
    classes.add(new XmlClass("com.test.PortalTest")); 

    XmlSuite suite = new XmlSuite(); 
    suite.setName("Portal Test Suite"); 

    XmlTest test = null; 
    for (int index = 0; index < 7; index++) { 
     test = new XmlTest(); 
     test.setName("Portal Test - " + index); 
     test.setXmlClasses(classes); 
     test.addParameter("downloadFileIndex", String.valueOf(index)); 
     suite.addTest(test); 
    } 

    List<XmlSuite> suites = new ArrayList<XmlSuite>(); 
    suites.add(suite); 

    TestListenerAdapter testListenerAdapter = new TestListenerAdapter(); 

    TestNG testNG = new TestNG(); 
    Class[] classesClasses = {PortalTest.class}; 
    testNG.setTestClasses(classesClasses); 
    testNG.setXmlSuites(suites); 
    testNG.addListener(testListenerAdapter); 
    testNG.run(); 

    System.out.println("Passed : " + testListenerAdapter.getPassedTests()); 
    System.out.println("Failed : " + testListenerAdapter.getFailedTests()); 
    System.out.println("Skipped : " + testListenerAdapter.getSkippedTests()); 

} 

Я использую ниже код для запуска метода, имеющего @Test на один раз. Как я могу запустить метод @Test несколько раз в одном тесте.

TestListenerAdapter tla = new TestListenerAdapter(); 
TestNG testng = new TestNG(); 
testng.setTestClasses(new Class[] { PortalTest.class }); 
testng.addListener(tla); 
testng.run(); 

ответ

0
  1. метода испытания TestNG всегда public, так что вы можете создать экземпляр экземпляра любого тестового класса из другого тестового класса и просто вызвать метод, который вы хотите от другого тестового класса.
  2. Поставщики данных TestNG должны возвращать либо массив массивов, Object[][], либо итератор массивов, Iterator<Object[]>, поэтому вы можете использовать столько (или несколько) аргументов, сколько захотите.

например.

@DataProvider 
public Object[][] dp() { 
    return new Object[][] { 
      new Object[] { 1, "a", 'x', 3.14, "pi" }, 
      new Object[] { 2, "b", 'y', 6.28, "tau" }, 
    }; 
} 

@Test(dataProvider = "dp") 
public void f(Integer n, String s, char c, double d, String s2) { 
    new OtherTestClass().f(n, s); 
} 
+0

Мне нужно запустить его как тест, как в Eclipse. Щелкните правой кнопкой мыши -> Запустить как -> Тест TestNG, который будет запускаться в качестве теста и генерировать отчет. Можно ли это сделать через java, используя классы 'TestNg',' Suite', 'Test' и методы типа' testNg.run() '.... – Venkatesh

+0

Есть ли способ создать' Object [] [] 'динамически? – Venkatesh

+0

Если вы хотите запустить набор тестов программным способом, см. Http://testng.org/doc/documentation-main.html#running-testng-programmatically – mfulton26

Смежные вопросы