У меня есть несколько модульных тестов Junit, для выполнения которых требуется большой объем кучи, например 1 ГБ. (Они тестируют функциональность, требующую интенсивного использования памяти, для приложения веб-запуска, которое будет работать только с достаточным пространством кучи и будет выполняться внутри на 64-разрядных машинах Win 7, поэтому перепроектирование тестов не является практическим предложением.)
Я разрабатываю в Intellij IDEA, поэтому знаю, что могу установить параметры JVM (например, -Xmx1024M) для тестового класса. Однако это только для запуска всего тестового класса - если я хочу запустить отдельный тест, мне нужно воссоздать конфигурации запуска для этого метода тестирования.
Кроме того, они зависят от IDE и коробки, поэтому, если я переключаю коробки (я разрабатываю на нескольких машинах) или один из моих коллег пытается запустить тесты, эти настройки не передаются. (Кроме того, мои коллеги используют другие IDE, такие как Eclipse и NetBeans.) FWIW, мы используем mercurial для управления исходным кодом.
Для цикла сборки мы используем Maven, поэтому я знаю, как указать для этого параметры JVM.
Итак: - Я ищу способ указать параметры JVM, которые будут применяться для всего тестового класса и отдельных методов тестирования; и - я хотел бы поделиться этой спецификацией с IDE на любой машине (взяв код из репозитория).
источник
Ответы:
В IntelliJ вы можете указать настройки по умолчанию для каждой конфигурации запуска. В диалоговом окне конфигурации Run / Debug (которое вы используете для настройки кучи для каждого теста) нажмите Defaults и JUnit . Эти настройки будут автоматически применяться к каждой новой тестовой конфигурации JUnit. Я предполагаю, что аналогичная настройка существует для Eclipse.
Однако нет простого способа перенести такие настройки (по крайней мере, в IntelliJ) между средами. Вы можете зафиксировать файлы проекта IntelliJ в своем репозитории: это может сработать, но я не рекомендую это делать.
Вы знаете, как их установить
maven-surefire-plugin
. Хороший. Это наиболее переносимый способ (см. Пример в ответе Птомли).В остальном - вы должны помнить, что тестовые примеры JUnit - это просто набор классов Java, а не отдельная программа. Это зависит от бегуна (пусть это будет автономный бегун JUnit, ваша 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 .
источник
-Xmx256M
к передаче в командную строку Java при выполнении ваших модульных тестов непосредственно из IntelliJ. Это меня просто запутало :-(Параметры также можно устанавливать на лету.
mvn test -DargLine="-Dsystem.test.property=test"
См. Http://www.cowtowncoder.com/blog/archives/2010/04/entry_385.html
источник
Согласно этому вопросу поддержки https://intellij-support.jetbrains.com/hc/en-us/community/posts/206165789-JUnit-default-heap-size-overridden-
аргумент -Xmx для тестового запуска IntelliJ junit будет поступать от maven-surefire-plugin, если он установлен.
Этот фрагмент pom.xml
похоже, передает аргумент -Xmx1024 в тестовый запуск junit с IntelliJ 2016.2.4.
источник
Я согласен с другими, которые сказали, что нет простого способа распространить эти настройки.
Для Eclipse: попросите своих коллег установить следующее:
-Xmx1024m
После этого все тесты будут выполняться,
-Xmx1024m
но, к сожалению, вы устанавливали его при каждой установке Eclipse. Возможно, вы могли бы создать собственный пакет Eclipse, содержащий этот параметр, и передать его своим коллегам.Также может помочь следующий рабочий процесс: Если IDE не может запустить тест, разработчик должен проверить, может ли Maven запустить этот тест или нет.
источник
Вы можете использовать systemPropertyVariables (java.protocol.handler.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
источник
Конкретная альтернатива eclipse, ограниченная параметром JVM java.library.path, позволяет установить его для конкретной исходной папки, а не для всего jdk, как предлагается в другом ответе:
Для тех, кто интересуется подробностями о том, почему тег maven argline должен быть предпочтительнее тега systemProperties, посмотрите, например:
Подобрать собственные файлы JNI в тесте Maven (lwjgl)
источник
Если вы установите его в коде Java, вы можете установить его следующим образом
static { System.getProperties().setProperty("env", "test"); System.getProperties().setProperty("spring.application.name", "spring-example"); }
Справка:
https://stackoverflow.com/a/60654275/4712855
https://stackoverflow.com/a/10774432/4712855
источник