tutorial tests test run compile java testing gradle

java - tests - Cómo dar propiedad del sistema a mi prueba a través de Gradle y-D



gradle run tests (4)

Aquí hay una variante que pasa numerosas propiedades del proyecto a la JVM de prueba como propiedades del sistema. Prefiero las propiedades del proyecto sobre las propiedades del sistema para aumentar la flexibilidad.

task intTest(type: Test) { systemProperties project.properties.subMap(["foo", "bar"]) }

Que se puede pasar en la línea de comandos:

$ gradle intTest -Pfoo=1 -Pbar=2

Y recuperado en tu prueba:

String foo = System.getProperty("foo");

Tengo un programa de Java que lee una propiedad del sistema

System.getProperty("cassandra.ip");

y tengo un archivo de construcción Gradle que empiezo con

gradle test -Pcassandra.ip=192.168.33.13

o

gradle test -Dcassandra.ip=192.168.33.13

sin embargo System.getProperty siempre devolverá nulo .

La única forma que encontré fue agregar eso en mi archivo de compilación Gradle a través de

test { systemProperty "cassandra.ip", "192.168.33.13" }

¿Cómo lo hago a través de -D


El indicador -P es para propiedades gradle, y el indicador -D es para propiedades JVM. Debido a que la prueba se puede bifurcar en una nueva JVM, el argumento -D pasado a gradle no se propagará a la prueba, parece que ese es el comportamiento que estás viendo.

Puedes usar SystemProperty en tu bloque de test como lo has hecho, pero basarlo en la propiedad de gradle entrante pasándolo con él -P:

test { systemProperty "cassandra.ip", project.getProperty("cassandra.ip") }

o alternativamente, si lo está pasando a través de -D

test { systemProperty "cassandra.ip", System.getProperty("cassandra.ip") }


Me encontré con este problema, excepto que no quiero volver a enumerar todas las propiedades dadas en la línea de comandos en el script de Gradle. Por lo tanto, envío todas las propiedades del sistema a mi prueba

task integrationTest(type: Test) { useTestNG() options { systemProperties(System.getProperties()) } }


Tuve un caso en el que necesitaba pasar varias propiedades del sistema en la JVM de prueba, pero no todas (no quería pasar las irrelevantes). En base a las respuestas anteriores, y al usar subMap para filtrar las que necesitaba, esto funcionó para mí:

task integrationTest(type: Test) { // ... Do stuff here ... systemProperties System.getProperties().subMap([''PROP1'', ''PROP2'']) }

En este ejemplo, solo se PROP1 y PROP2 , si existen en la JVM de Gradle.