Как дать системное свойство моему тесту через Gradle и -D
у меня есть программа Java, которая читает системное свойство
System.getProperty("cassandra.ip");
и у меня есть файл сборки Gradle, который я начинаю с
gradle test -Pcassandra.ip=192.168.33.13
или
gradle test -Dcassandra.ip=192.168.33.13
4 ответов:
флаг-P предназначен для свойств gradle, а флаг-D-для свойств JVM. Поскольку тест может быть разветвлен в новой JVM, аргумент-D, переданный gradle, не будет распространяться на тест - похоже, что это поведение, которое вы видите.
вы можете использовать systemProperty в вашем
testблок, как вы сделали, но основывать его на входящем свойстве gradle, передавая его с ним -P:test { systemProperty "cassandra.ip", project.getProperty("cassandra.ip") }или же, если вы проходите через - Д
test { systemProperty "cassandra.ip", System.getProperty("cassandra.ip") }
столкнулся с этой очень большой проблемой, за исключением того, что я не хочу снова перечислять все свойства, заданные в командной строке в скрипте gradle. Поэтому я отправляю все свойства системы в мой тест
task integrationTest(type: Test) { useTestNG() options { systemProperties(System.getProperties()) } }
у меня был случай, когда мне нужно передать несколько свойства системы в тест JVM, но не все (не хотел переходить в неуместные). Основываясь на приведенных выше ответах, и с помощью
subMapчтобы отфильтровать те, которые мне нужны, это сработало для меня:task integrationTest(type: Test) { // ... Do stuff here ... systemProperties System.getProperties().subMap(['PROP1', 'PROP2']) }в этом примере, только
PROP1иPROP2будут переданы, если они существуют в JVM gradle.
вот вариант, который передает многочисленные свойства проекта тестовой JVM в качестве системных свойств. Я предпочитаю свойства проекта над свойствами системы для повышения гибкости.
task intTest(type: Test) { systemProperties project.properties.subMap(["foo", "bar"]) }который может быть передан в командной строке:
$ gradle intTest -Pfoo=1 -Pbar=2и извлекается в вашем тесте:
String foo = System.getProperty("foo");
Comments