2015-07-08 13 views
23

Ich habe eine Task, die eine Test-Testsuite ausführt. Ich möchte in der Lage sein, ein Flag an die Aufgabe zu übergeben, um eine spezielle Test-XML-Suite-Datei zu verwenden (oder einfach die Standard-Suite zu verwenden, wenn das Flag nicht gesetzt ist).Gradle Aufgabe prüfen, ob die Eigenschaft definiert ist

gradle test 

Sollte die Standard-Standard-Suite von Tests laufen

gradle test -Pspecial 

Sollte die spezielle Reihe von Tests laufen

Ich habe so etwas wie dies versucht:

test { 
    if (special) { 
     test(testng_special.xml); 
    } 
    else { 
     test(testng_default.xml); 
    } 
} 

Aber Ich erhalte einen undefinierten Eigenschaftsfehler. Was ist der richtige Weg?

Antwort

46
if (project.hasProperty('special')) 

sollte es tun.

Beachten Sie, dass das, was Sie tun, um eine Testng-Suite auszuwählen, nicht funktioniert, AFAIK: die Testaufgabe hat keine test() Methode. Siehe https://discuss.gradle.org/t/how-to-run-acceptance-tests-with-testng-from-gradle/4107 für ein funktionierendes Beispiel:

test { 
    useTestNG { 
     suites 'src/main/resources/testng.xml' 
    } 
} 
+0

@ user2506293, das ist nicht unbedingt genug. Sie müssen beide prüfen, ob das Projekt eine Eigenschaft hat und ob ** es gesetzt ist **. – Opal

+0

Das ist groovy @Opal - eine Null führt zu false, also müssen Sie das nicht explizit überprüfen. – th3morg

0

Von Gradle Documentation:

-P, --project-prop

Stellt ein Projekt Eigenschaft des Stammprojekt, zum Beispiel -Pmyprop = myValue

So sollten Sie verwenden:

gradle test -Pspecial=true 

mit einem Wert nach dem Namen der Eigenschaft

+0

mit JB Nizets Lösung ist es nicht notwendig, die Eigenschaft auf wahr zu setzen, nur um es zu definieren – user2506293

+0

Das stimmt, weil Sie nicht den Eigenschaftswert lesen, sondern nur prüfen, ob die Eigenschaft existiert. Angenommen, Sie würden das Gegenteil tun, statt "Special" würden Sie "notSpecial" verwenden und Sie benötigten einen falschen Wert für diese Eigenschaft in Ihrem Zustand. Mit meiner Lösung werden Sie keine Probleme haben, da Sie '-PnotSpecial = false' mit der JBNize-Lösung übergeben, stattdessen ist der übergebene Wert trotzdem wahr, weil die' notSpecial' -Eigenschaft existiert. –

Verwandte Themen