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.