Свойства весеннего ботинок с пружинным захватом [дубликат]

«Явный» тип в Java - это класс, который является неэквивалентным и имеет дело с «сырыми» объектами, а не с типичными типами типовых параметров.

Например, до того, как были доступны дженерики Java , вы должны использовать класс коллекции следующим образом:

LinkedList list = new LinkedList();
list.add(new MyObject());
MyObject myObject = (MyObject)list.get(0);

Когда вы добавляете свой объект в список, ему все равно, какой тип объекта он есть, и когда вы его получите из списка, вам нужно явно указать его на тот тип, который вы ожидаете.

Используя generics, вы удаляете «неизвестный» коэффициент, потому что вы должны явно указать, какой тип объектов может идти в списке:

LinkedList<MyObject> list = new LinkedList<MyObject>();
list.add(new MyObject());
MyObject myObject = list.get(0);

Обратите внимание, что с помощью дженериков вам не нужно бросать объект, исходящий из вызова get, сбор предварительно задан для работы с MyObject. Этот факт является основным движущим фактором для генериков. Он меняет источник ошибок времени выполнения во что-то, что можно проверить во время компиляции.

56
задан robkuz 28 January 2014 в 15:13
поделиться

4 ответа

Флаг -P предназначен для свойств градиента, а флаг -D предназначен для свойств JVM. Поскольку тест может быть разветвлен в новой JVM, аргумент -D, переданный в gradle, не будет распространяться на тест - похоже, что это поведение, которое вы видите.

Вы можете использовать systemProperty в ваш блок test, как вы это делали, но основывайте его на свойстве входящего градиента, передавая его с ним -P:

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

или, альтернативно, если вы передаете его через -D

test {
    systemProperty "cassandra.ip", System.getProperty("cassandra.ip")
}
59
ответ дан Jeff Storey 20 August 2018 в 21:34
поделиться
  • 1
    Это не работает для меня (проверено с помощью System.getProperties().stringPropertyNames().forEach(System.out::println); в Java-коде, оно не появляется) – CLOVIS 9 July 2018 в 20:09
  • 2
    Предупреждение: getProperty выбрасывает MissingPropertyException, если свойство не найдено. Вместо этого используйте ответ Eron: stackoverflow.com/a/43112126/915441 – Yngvar Kristiansen 31 July 2018 в 11:52
  • 3
    – Duncan Calvert 6 September 2018 в 18:34

У меня был случай, когда мне нужно было передать свойства системы multiple в тестовый JVM, но не все (не хотели пропускать нерелевантные). Основываясь на приведенных выше ответах и ​​используя subMap для фильтрации тех, которые мне нужны, это сработало для меня:

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

В этом примере только PROP1 и PROP2 будут переданы в , если они существуют в JVM градильни.

6
ответ дан avivr 20 August 2018 в 21:34
поделиться

Вот вариант, который передает множество свойств проекта тестовому JVM в качестве системных свойств. Я предпочитаю свойства проекта над свойствами системы, чтобы повысить гибкость.

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

Который может передаваться в командной строке:

 $ gradle intTest -Pfoo=1 -Pbar=2

И получен в вашем тесте:

String foo = System.getProperty("foo");
2
ответ дан Eron Wright 20 August 2018 в 21:34
поделиться
  • 1
    При запуске System.getProperty("someprop") с использованием этого метода подмары я получил {someprop=foo} вместо foo. Мне пришлось использовать systemProperty "foo", project.properties.subMap(["foo"]).get("foo") в build.gradle – Yngvar Kristiansen 31 July 2018 в 14:29

Пришел к этой очень большой проблеме, за исключением того, что я не хочу снова перечислять все свойства, указанные в командной строке в сценарии градации. Поэтому я отправляю все свойства системы в свой тест

task integrationTest(type: Test) {
    useTestNG()
    options {
        systemProperties(System.getProperties())
    }
}
18
ответ дан MrSpock 20 August 2018 в 21:34
поделиться
Другие вопросы по тегам:

Похожие вопросы: