Как установить параметры 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 74

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, как предлагается в другом ответе:

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

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

возьмите собственные файлы JNI в тесте Maven (lwjgl)

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