2016-04-22 21 views
1

Gibt es eine Möglichkeit, TestNG-Test von einer anderen Java-Klasse auszuführen.TestNG-Test von einer anderen Klasse ausführen

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

Ich brauche die gleiche Methode in einer einzigen Suite mit verschiedenen Argumenten. (Innen for-Schleife)

Ist es möglich, laufen?

Auch ich sehe, dass Datenprovider Methode Object[][] zurückgeben sollte. Dies funktioniert bei Methoden mit zwei Argumenten. Können wir mehr als zwei Argumente senden?

@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) { 
} 

Ich versuche es unter Verwendung einiger TestNG Klassen

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

} 

ich Code unten verwenden zu tun Methode auszuführen @Test für eine Zeit. Wie kann ich die @Test Methode mehrmals in einem Test ausführen.

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

Antwort

0
  1. TestNG Testmethoden sind immer public so können Sie eine Instanz von jeder Testklasse von einer anderen Test-Klasse instanziiert und rufen Sie einfach die Methode, die Sie von einer anderen Testklasse wollen.
  2. TestNG-Datenprovider müssen entweder ein Array von Arrays, Object[][], oder einen Iterator von Arrays, Iterator<Object[]>, zurückgeben, so dass Sie sicher beliebig viele (oder wenige) Argumente verwenden können.

z.B.

@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

Ich muss es als Test wie in Eclipse ausführen. Rechtsklick -> Ausführen als -> TestNG-Test, der als Test ausgeführt wird und einen Bericht generiert. Kann diese Aktion über Java mit den Klassen 'TestNg',' Suite', 'Test' und Methoden wie' testNg.run() '... durchgeführt werden? – Venkatesh

+0

gibt es eine Möglichkeit,' Object [] [] 'dynamisch zu erstellen? – Venkatesh

+0

Wenn Sie eine Reihe von Tests programmatisch ausführen möchten, finden Sie unter http://testng.org/doc/documentation-main.html#running-testng-programmatically – mfulton26

Verwandte Themen