Есть ли способ ограничить пространство кучи при запуске одного теста JUnit? - PullRequest
1 голос
/ 07 ноября 2019

У меня есть некоторый код, который должен быть в состоянии работать в системах с ограниченной памятью (например, 1750 МБ), и у меня есть тест JUnit специально для этого кода. Однако мой сервер интеграции Jenkins, на котором выполняются модульные тесты, работает с пространством кучи, установленным на 4 ГБ.

На моей рабочей станции разработки в Eclipse я могу вручную запустить модульный тест с аргументом виртуальной машины -Xmx1750m.

Есть ли какая-нибудь аннотация, которую я могу добавить к отдельному тестовому сценарию JUnit, который заставит тест выполняться с указанным выше аргументом VM (без влияния на другие модульные тесты)?

1 Ответ

1 голос
/ 08 ноября 2019

Тест JUnit - это не что иное, как класс Java, который работает внутри JVM. Таким образом, будет трудно определить эти ограничения только для одного модульного теста. В конце концов, вам нужно будет настроить саму JVM.

Чтобы добиться этого, вы можете использовать отдельную конфигурацию для своих тестов, как показано на примере Maven. Во-первых, вы можете использовать свойство конфигурации surefire-plugins argLine для настройки среды. Затем, ограничьте класс для тестирования с помощью конфигурации include, как описано здесь .

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-surefire-plugin</artifactId>
    <version>...</version>
    <configuration>
        <argLine>-Xmx2048m</argLine>
        <includes>
            <include>...</include>
        </includes>
    </configuration>
</plugin>

Затем используйте пользовательский профиль, который, вероятно, вызывается активным свойством в вашемсервер сборки.

<profile>
    <id>low-memory-tests</id>
    <activation>
        <property>
            <name>...</name>
        </property>
    </activation>
</profile>

Примечания:

  • Даже если вы выполняете только один одиночный модульный тест в этом профиле, вы все равно не можете гарантировать, что только тестможет потреблять 2048м пространства кучи, но все приложение. Но я полагаю, что это будет хорошая ставка.
  • Даже если вы не используете Maven, другие инструменты сборки должны иметь аналогичный способ применения вышеуказанной конфигурации, вы поймете, что идея.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...