Как установить параметры JVM для юнит-тестов Junit? - PullRequest
85 голосов
/ 28 сентября 2011

У меня есть несколько юнит-тестов Junit, для выполнения которых требуется много места в куче, т. Е. 1G. (Они тестируют работу с интенсивным объемом памяти для приложения веб-запуска, которое будет работать только с достаточным пространством кучи и будет запускаться внутри на 64-разрядных компьютерах с Win 7, поэтому переработка тестов не является практическим предложением.)

Я занимаюсь разработкой в ​​Intellij IDEA, поэтому я знаю, что могу установить параметры JVM (например, -Xmx1024M) для тестового класса. Тем не менее, это только для запуска всего класса теста - если я хочу запустить отдельный тест, я должен заново создать конфигурации конфигурации для этого метода теста.

Кроме того, это специфичные для IDE и ящиков - поэтому, если я переключаю ящики (я разрабатываю на нескольких машинах) или один из моих коллег пытается запустить тесты, эти настройки не передаются. (Также мои коллеги используют другие IDE, такие как Eclipse и NetBeans.) FWIW, мы используем Mercurial для контроля исходного кода.

Для цикла сборки мы используем Maven, поэтому я знаю, как указать для этого параметры JVM.

Итак: - я ищу способ указать параметры JVM, которые будут применяться для всего класса тестирования и отдельных методов тестирования; а также - Я хотел бы поделиться этими спецификациями между IDE на любом компьютере (взяв код из репозитория).

Ответы [ 7 ]

71 голосов
/ 28 сентября 2011

В 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 .

47 голосов
/ 28 сентября 2011

В IntelliJ вы можете указать настройки по умолчанию для каждой конфигурации запуска. В диалоговом окне конфигурации Run / Debug (которое вы используете для настройки кучи на тест) нажмите Defaults и JUnit . Эти настройки будут автоматически применяться к каждой новой конфигурации теста JUnit. Я полагаю, что аналогичные настройки существуют для Eclipse.

Однако не существует простого варианта переноса таких настроек (по крайней мере, в IntelliJ) между средами. Вы можете зафиксировать файлы проекта IntelliJ в своем хранилище: это может работать, но я не рекомендую это.

Вы знаете, как установить их для maven-surefire-plugin. Хорошо. Это самый переносимый способ (см. Пример ответа Птомли).

В остальном вы должны помнить, что контрольные примеры JUnit - это просто набор классов Java, а не отдельная программа. Это зависит от бегуна (пусть это будет автономный бегун JUnit, ваша IDE, maven-surefire-plugin для установки этих опций. При этом не существует «портативного» способа их установки, так что настройки памяти применяются независимо от бегуна). .

Для примера: вы не можете определить параметр Xmx при разработке сервлета - это зависит от контейнера. Вы не можете сказать: «этот сервлет всегда должен запускаться с Xmx=1G.

19 голосов
/ 22 июля 2014

Параметры могут быть установлены на лету также.

mvn test -DargLine="-Dsystem.test.property=test"

См. http://www.cowtowncoder.com/blog/archives/2010/04/entry_385.html

13 голосов
/ 28 сентября 2011

Я согласен с другими, кто сказал, что не существует простого способа распространения этих настроек.

Для Eclipse: попросите своих коллег установить следующее:

  • Настройки Windows / Java / Установленные JRE:
  • Выберите правильную JRE / JDK (или сделайте это для всех)
  • Редактировать
  • Аргументы виртуальной машины по умолчанию: -Xmx1024m
  • Готово, ОК.

После этого все тесты будут выполняться с -Xmx1024m, но, к сожалению, вы установили его в каждой установке Eclipse. Возможно, вы могли бы создать собственный пакет Eclipse, который содержит этот параметр, и предоставить его коллегам.

Также может помочь следующий рабочий процесс: если IDE не может запустить тест, разработчик должен проверить, может ли Maven запускать этот тест или нет.

  • Если Maven может запустить , то причиной сбоя обычно являются настройки IDE разработчика. Разработчик должен проверить эти настройки.
  • Если Maven также не может запустить тест, разработчик знает, что причиной сбоя является не IDE, поэтому он / она может использовать IDE для отладки теста.
12 голосов
/ 06 октября 2016

По этому вопросу поддержки https://intellij -support.jetbrains.com / Нс / EN-US / сообщества / сообщений / 206165789-JUnit-умолчанию-кучного размера overridden-

Аргумент -Xmx для запуска теста IntelliJ junit будет исходить от подключаемого модуля maven-surefire, если он установлен.

Этот фрагмент pom.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.

2 голосов
/ 29 мая 2014

Вы можете использовать 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

1 голос
/ 15 апреля 2012

Специальная альтернатива затмения, ограниченная параметром JVM java.library.path, позволяет установить его для конкретной исходной папки, а не для всего jdk, как предлагается в другом ответе:

  1. выберите источникпапка, в которой находится запускаемая программа (обычно source / test / java)
  2. введите alt enter, чтобы открыть страницу свойств для этой папки
  3. выберите родную в левой панели
  4. Отредактируйте родной путь.Путь может быть абсолютным или относительным по отношению к рабочему пространству, второе является более устойчивым к изменениям.

Для тех, кто интересуется подробностями о том, почему тег maven argline должен быть предпочтительнее systemProperties, посмотрите, например:

Подберите собственные файлы JNI в тесте Maven (lwjgl)

...