Как установить параметры JVM для модульных тестов Junit?
У меня есть некоторые модульные тесты Junit, которые требуют большого количества кучи-пространства для запуска - т. е. 1G. (они тестируют функциональность с интенсивной памятью для приложения webstart, которое будет работать только с достаточным кучи-пространством и будет выполняться внутренне на 64-разрядных машинах Win 7-поэтому перепроектирование тестов не является практическим предложением.)
Я разрабатываю Intellij IDEA, поэтому я знаю, что могу установить параметры JVM (например,- Xmx1024M) для тестового класса. Однако это только для выполнения всего теста класс-если я хочу запустить отдельный тест, я должен воссоздать конфигурации запуска для этого метода тестирования.
кроме того, это IDE и box specific - поэтому, если я переключаю коробки (я разрабатываю на нескольких машинах) или один из моих коллег пытается запустить тесты, эти настройки не передаются. (Кроме того, другие IDE, такие как Eclipse и NetBeans, используются моими коллегами.) FWIW, мы используем mercurial для управления исходным кодом.
для цикла сборки мы используем Maven, поэтому я знаю как указать параметры JVM для этого.
Так: - Я ищу способ определения параметров JVM, которые будут применяться для всего тестового класса и отдельных методов тестирования; и - Я хотел бы поделиться этими спецификациями через IDE на любой машине (взяв код из репозитория).
7 ответов:
в IntelliJ можно задать параметры по умолчанию для каждой конфигурации запуска. В Run / Debug диалог настройки (тот, который вы используете для настройки кучи на тест) нажмите на по умолчанию и JUnit. Эти параметры будут автоматически применяться к каждой новой конфигурации теста JUnit. Я думаю, что подобная настройка существует для Eclipse.
однако нет простой возможности передать такие настройки (по крайней мере, в IntelliJ) через среды. Вы можете зафиксируйте файлы проекта IntelliJ в своем репозитории: это может сработать, но я не рекомендую его.
вы знаете, как установить их для
maven-surefire-plugin
. Хороший. Это самый портативный способ (см. ответ Птомли для примера).для остальных-вы должны помнить, что тестовые случаи JUnit-это просто куча классов Java, а не отдельная программа. Это зависит от бегуна (пусть это будет автономный JUnit runner, ваша IDE,
maven-surefire-plugin
установить эти параметры. Это, как говорится, нет " портативный" способ их установки, так что настройки памяти применяются независимо от бегуна.чтобы дать вам пример: вы не можете определить
Xmx
параметр при разработке сервлета - это зависит от контейнера, чтобы определить это. Вы не можете сказать: "этот сервлет всегда должен работать сXmx=1G
.
в Maven вы можете настроить плагин surefire
<plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-surefire-plugin</artifactId> <version>2.9</version> <configuration> <argLine>-Xmx256M</argLine> </configuration> </plugin>
Если вы используете Maven для сборки, то эта конфигурация будет выполняться в исходном дереве и применяться при выполнении тестов. Смотрите Плагин Maven Surefire документация.
параметры могут быть установлены на лету тоже.
mvn test -DargLine="-Dsystem.test.property=test"
см.http://www.cowtowncoder.com/blog/archives/2010/04/entry_385.html
Я согласен с другими, кто сказал, что нет простого способа распространения этих настроек.
для Eclipse: попросите своих коллег установить следующее:
- Настройки Windows / Java / Установленная JREs:
- Выберите правильный JRE/JDK (или сделайте это для всех из них)
- Edit
- аргументы виртуальной машины по умолчанию:
-Xmx1024m
- готово, ОК.
после этого все тесты будут работать с
-Xmx1024m
но, к сожалению, вы установили его в каждой установке Eclipse. Возможно, вы могли бы создать пользовательский пакет Eclipse, который содержит этот параметр, и дать его вам коллегам.следующий рабочий процесс также может помочь: если IDE не может запустить тест, разработчик должен проверить, может ли Maven запустить этот тест или нет.
- Если Maven может работать это причиной отказа обычно является настройки разработчика интегрированная среда разработки. Разработчик должен проверить эти настройки.
- если Maven также не может работать тест разработчик знает, что причиной сбоя является не IDE, поэтому он/она может использовать IDE для отладки теста.
согласно этому вопросу поддержки https://intellij-support.jetbrains.com/hc/en-us/community/posts/206165789-JUnit-default-heap-size-overridden-
аргумент-Xmx для тестового запуска IntelliJ junit будет получен из плагина maven-surefire, если он установлен.
этот пом.фрагмент xml
<plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-surefire-plugin</artifactId> <configuration> <argLine>-Xmx1024m</argLine> </configuration> </plugin>
похоже, что аргумент-Xmx1024 передается в тестовый запуск junit с помощью IntelliJ 2016.2.4.
специфическая альтернатива eclipse, ограниченная java.библиотека.параметр path JVM позволяет установить его для определенной исходной папки, а не для всего jdk, как предлагается в другом ответе:
- выберите исходную папку, в которой находится программа для запуска (обычно source/test/java)
- введите alt enter, чтобы открыть страницу свойств для этой папки
- выберите родной в левой панели
- изменить собственный путь. Путь может быть абсолютным или по отношению к рабочему пространству, второе - более устойчиво к изменениям.
для тех, кто интересуется подробностями о том, почему тег Maven argline должен быть предпочтительнее systemProperties one, посмотрите, например:
вы можете использовать systemPropertyVariables (java.протокол.обработчик.pkgs - это ваше имя аргумента JVM):
<plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-surefire-plugin</artifactId> <version>2.12.4</version> <configuration> <systemPropertyVariables> <java.protocol.handler.pkgs>com.zunix.base</java.protocol.handler.pkgs> <log4j.configuration>log4j-core.properties</log4j.configuration> </systemPropertyVariables> </configuration> </plugin>
http://maven.apache.org/surefire/maven-surefire-plugin/examples/system-properties.html