Как дать системное свойство моему тесту через Gradle и -D



у меня есть программа Java, которая читает системное свойство



System.getProperty("cassandra.ip");


и у меня есть файл сборки Gradle, который я начинаю с



gradle test -Pcassandra.ip=192.168.33.13


или



gradle test -Dcassandra.ip=192.168.33.13
637   4  

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

    Ничего не найдено.