Как установить параметры JVM для тестов Junit Unit?

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

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

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

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

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

Ответ 1

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

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

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

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

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

Ответ 2

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

Ответ 4

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

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

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

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

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

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

Ответ 5

В соответствии с этим вопросом поддержки https://intellij-support.jetbrains.com/hc/en-us/community/posts/206165789-JUnit-default-heap-size-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.

Ответ 6

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

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

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

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

Ответ 7

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