Я унаследовал сборку большого реактора Maven с отдельным модулем, содержащим интеграционные тесты. Когда тесты в этом каталоге выполняются в Intellij (щелкните имя пакета и запустите все), это займет ~ 10 минут к моменту загрузки контекста пружины и завершения пакета. Выполнение тестов mvn -pl занимает ~ 30 минут, потому что контекст загружается снова и снова (у нашего контекста есть один компонент, для загрузки которого требуется ~ 40 сек).
Я попытался удалить surefire из сборки родительского pom.xmlи настройку плагина в этом модуле так, чтобы он имел:
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<version>3.0.0-M3</version>
<configuration>
<forkCount>1</forkCount>
<reuseForks>true</reuseForks>
<includes>
<include>*/**/integration/**/*.java</include>
</includes>
</configuration>
</plugin>
Но он все равно, кажется, теряет статическую ссылку на контекст и перезагружается каждый раз.
В этом есть примечаниеSpring Docs https://docs.spring.io/spring/docs/current/spring-framework-reference/testing.html#testcontext-ctx-management-caching
Платформа Spring TestContext хранит контексты приложения в статическом кэше. Это означает, что контекст буквально хранится в статической переменной. Другими словами, если тесты выполняются в отдельных процессах, статический кеш очищается между каждым выполнением теста, что эффективно отключает механизм кэширования.
Чтобы воспользоваться механизмом кэширования, все тесты должны выполняться в одном и том же процессе илитестирование. Это может быть достигнуто путем выполнения всех тестов как группы в среде IDE. Аналогичным образом, при выполнении тестов с помощью инфраструктуры сборки, такой как Ant, Maven или Gradle, важно убедиться, что среда сборки не развивается между тестами. Например, если для forkMode для подключаемого модуля Maven Surefire задано всегда или pertest, среда TestContext не сможет кэшировать контексты приложения между тестовыми классами, и в результате процесс сборки будет выполняться значительно медленнее.
Но, к сожалению, они не предлагают современного решения, упомянутый ими атрибут forkMode устарел.
Я также пытался установить вилки равными 0 в верном порядке, как упоминалось в их документации, но это не улучшило то, что https://maven.apache.org/surefire/maven-surefire-plugin/examples/fork-options-and-parallel-execution.html
Я предполагаю, потому что тесты выполняются с одним контекстом. загрузите в intellij, что конфигурация контекста правильная и что проблема заключается в том, как Surefire вызывает их. Я подумал о переходе на Failsafe, но из того, что я прочитал, это даст больше контроля над ресурсами, а не решит мою проблему здесь.
Может кто-нибудь увидеть какие-либо очевидные проблемы или подумать о других вариантах, которые яМогли бы попробовать?
В качестве альтернативы, есть ли у кого-нибудь другой инструмент сборки, работающий с тестами интеграции Spring в командной строке, который имитирует то, как IDE выполняют тесты? Мы не создаем отчеты по тестам, так как они могут загружать и запускать тесты, мы можем использовать журналы для устранения любых проблем.