JavaRush /Курсы /Модуль 5. Spring /Параллельное выполнение тестов

Параллельное выполнение тестов

Модуль 5. Spring
11 уровень , 11 лекция
Открыта

В Spring Framework 5.0 появилась базовая поддержка параллельного выполнения тестов в рамках одной JVM при использовании Spring TestContext Framework. В общем случае это означает, что большинство тестовых классов или тестовых методов можно выполнять параллельно без каких-либо изменений в тестовом коде или конфигурации.

Подробную информацию о том, как настроить параллельное выполнение тестов, можно найти в документации к вашей системе тестирования, инструментальному средству сборки или IDE.

Помните, что внедрение параллелизма в тестовый комплект может привести к неожиданным побочным эффектам, необычной логике работы во время выполнения программы, а также к тому, что тесты будут периодически или случайным образом завершаться неудачно. Поэтому команда Spring Team предлагает следующие общие рекомендации касательно случаев, в которых не следует выполнять тесты параллельно.

Не выполняйте тесты параллельно, если тесты:

  • Используют поддержку аннотации @DirtiesContext в Spring Framework.

  • Используют поддержку аннотаций @MockBean или @SpyBean в Spring Boot.

  • Используют поддержку аннотации @FixMethodOrder в JUnit 4 или любую функцию тестового фреймворка, которая предназначена для обеспечения выполнения тестовых методов в определенном порядке. Обратите внимание, однако, что это не относится к случаям, когда целые тестовые классы выполняются параллельно.

  • Изменение состояния общих служб или систем, таких как база данных, брокер сообщений, файловая система и другие. Это относится как к встроенным, так и к внешним системам.

Если параллельное выполнение теста завершается исключением, в котором говорится, что ApplicationContext для текущего теста больше не активен, это обычно означает, что ApplicationContext был удален из ContextCache в другом потоке.

Это может быть связано с использованием аннотации @DirtiesContext или с автоматическим вытеснением из ContextCache. Если виновником является аннотация @DirtiesContext, то нужно либо найти способ избежать использования @DirtiesContext, либо исключить такие тесты из параллельного выполнения. Если максимальный размер ContextCache был превышен, можно увеличить максимальный размер кэша. Подробнее см. описание в разделе, посвященном контекстному кэшированию.

Параллельное выполнение тестов в Spring TestContext Framework возможно, только если базовая реализация TestContext предоставляет конструктор копирования, как описано в javadoc для TestContext. DefaultTestContext, используемый в Spring, предоставляет такой конструктор. Однако если вы используете стороннюю библиотеку, которая предоставляет специальную реализацию TestContext, вам необходимо убедиться, что она подходит для параллельного выполнения тестов.
Комментарии
ЧТОБЫ ПОСМОТРЕТЬ ВСЕ КОММЕНТАРИИ ИЛИ ОСТАВИТЬ КОММЕНТАРИЙ,
ПЕРЕЙДИТЕ В ПОЛНУЮ ВЕРСИЮ