2016-07-14 10 views
0

Ich habe meine TestNG Tests wie unten:Laufabhängige Tests in TestNG in logischen ODER

public class Tests2 { 

    @Test(priority = 10) 
    public void Test1() { 
     System.out.println("+++++++++Running Test1++++++++++++"); 
     throw new SkipException("Skipping the test"); 
    } 

    @Test(priority = 20) 
    public void Test2() { 
     System.out.println("+++++++++Running Test2++++++++++++"); 

    } 

    @Test(priority = 30, dependsOnMethods = {"Test1","Test2"}) 
    public void Test3() { 
     System.out.println("+++++++++Running Test3++++++++++++"); 
    } 
} 

ich meine Test3 ausgeführt werden soll, wenn eine Test1 OR Test2 geben wird. Die Art, wie TestNG funktioniert, sieht so aus, als ob es immer prüft, ob sowohl Test1 als auch Test2 bestanden werden. Gibt es eine Möglichkeit, dass wir das logische UND in logisches ODER ändern können? Ich habe auch versucht die dependsOnMethods wie die Angabe aber auf Glück

dependsOnMethods = {("Test1"),("Test2")}) 

ich auch dependsOnGroups versucht, aber das wird wieder überprüft, ob alle entsprechenden Tests in logischen weitergegeben werden AND. Nach den obigen Tests laufen erhalte ich die Ausgabe als:

+++++++++Running Test1++++++++++++ 
+++++++++Running Test2++++++++++++ 
PASSED: Test2 
SKIPPED: Test1 
org.testng.SkipException: Skipping the test 
    at com.Tests.Tests2.Test1(Tests2.java:12) 
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) 
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 
    at java.lang.reflect.Method.invoke(Method.java:497) 
    at org.testng.internal.MethodInvocationHelper.invokeMethod(MethodInvocationHelper.java:80) 
    at org.testng.internal.Invoker.invokeMethod(Invoker.java:714) 
    at org.testng.internal.Invoker.invokeTestMethod(Invoker.java:901) 
    at org.testng.internal.Invoker.invokeTestMethods(Invoker.java:1231) 
    at org.testng.internal.TestMethodWorker.invokeTestMethods(TestMethodWorker.java:127) 
    at org.testng.internal.TestMethodWorker.run(TestMethodWorker.java:111) 
    at org.testng.TestRunner.privateRun(TestRunner.java:767) 
    at org.testng.TestRunner.run(TestRunner.java:617) 
    at org.testng.SuiteRunner.runTest(SuiteRunner.java:334) 
    at org.testng.SuiteRunner.runSequentially(SuiteRunner.java:329) 
    at org.testng.SuiteRunner.privateRun(SuiteRunner.java:291) 
    at org.testng.SuiteRunner.run(SuiteRunner.java:240) 
    at org.testng.SuiteRunnerWorker.runSuite(SuiteRunnerWorker.java:52) 
    at org.testng.SuiteRunnerWorker.run(SuiteRunnerWorker.java:86) 
    at org.testng.TestNG.runSuitesSequentially(TestNG.java:1198) 
    at org.testng.TestNG.runSuitesLocally(TestNG.java:1123) 
    at org.testng.TestNG.run(TestNG.java:1031) 
    at org.testng.remote.RemoteTestNG.run(RemoteTestNG.java:115) 
    at org.testng.remote.RemoteTestNG.initAndRun(RemoteTestNG.java:207) 
    at org.testng.remote.RemoteTestNG.main(RemoteTestNG.java:178) 

SKIPPED: Test3 

=============================================== 
    Default test 
    Tests run: 3, Failures: 0, Skips: 2 
=============================================== 


=============================================== 
Default suite 
Total tests run: 3, Failures: 0, Skips: 2 
=============================================== 

Antwort

0

dependsOnMethods sagt nur die Reihenfolge, in der Unit-Test ausgeführt wird. Es bedeutet nicht, dass diese Tests bestanden oder fehlgeschlagen sind.

Sie können es übergeben programmatisch tun

public class Tests2 { 
    private boolean testOnePassed=false; 
    private boolean testTwoPassed=false; 

    @Test(priority = 10) 
    public void Test1() { 
     System.out.println("+++++++++Running Test1++++++++++++"); 
     testTwoPassed = false// based on your custom condition 
     throw new SkipException("Skipping the test"); 
    } 

    @Test(priority = 20) 
    public void Test2() { 
     System.out.println("+++++++++Running Test2++++++++++++"); 
     testTwoPassed = true// based on your custom condition 

    } 

    @Test(priority = 30) 
    public void Test3() { 
     if(testOnePassed || testTwoPassed){ 
     System.out.println("+++++++++Running Test3++++++++++++"); 
     } 
    } 
} 
+0

hey @MSach, ich glaube, ein abhängiges Test für den Fall nicht die dependee (übergeordneten) Test ausgeführt wird und ausgeführt wird. Zusammen mit der Kontrolle der Ausführungsreihenfolge überprüft es auch den bestandenen/fehlgeschlagenen Status des Eltern-Testfalls. Können Sie bitte Ihren Kommentar erläutern? –

+0

Die obige Lösung funktioniert nicht. Test3 wird nicht ausgeführt, wenn entweder Test1 ODER Test2 ein Fehler ist. –

+0

Entfernen Sie einfach die Abhängigkeit, behalten Sie die Priorität. Dann würde es funktionieren. Dies scheint jedoch keine skalierbare Lösung zu sein. –

Verwandte Themen