Когда интеграционные тесты начинаются с IDE ApllicationContext загружается только один раз, а затем делится между тестами и работает как аспект. Но выполнение mvn clean install
новых ApllicationContext, созданных за каждый тест. По Spring doc Я настроил Maven-безотказный-плагин использовать единую вилкуSpring ApplicationContext не кэшируется для тестирования интеграции с Maven
<artifactId>maven-failsafe-plugin</artifactId>
<version>2.12.4</version>
<configuration>
<forkCount>1</forkCount>
<reuseForks>true</reuseForks>
...
Для кэширования ApplicationContext используется followin аннотации:
@ContextConfiguration(classes = TestConfig.class)
Почему контекст не разделяется при создании приложения с Maven? На самом деле есть ли другие способы ускорить ИТ-тесты? Благодарю.
ОБНОВЛЕНО:
Это многомодульная проект Maven. Accordig Spring IT caching doc
Чтобы извлечь выгоду из механизма кэширования, все испытания должны выполняться в том же процессе или набора тестов. Этого можно достичь, выполнив все тесты в качестве группы в среде IDE. Аналогичным образом, при выполнении тестов с каркасом построения , таким как Ant, Maven или Gradle, важно сделать уверенным, что структура сборки не развивается между тестами. Для примера , если forkMode для плагина Maven Surefire установлен на всегда или pertest, инфраструктура TestContext не сможет кэшировать контексты приложений между тестовыми классами, и процесс сборки будет в результате значительно медленнее.
Так maven-failsafe-plugin 2.14 эта конфигурация равна forkMode = раз
Не могли бы вы добавить более подробную информацию о своих тестовых конфигурациях и общей структуре –
@AliDehghani В настоящее время я запускаю тесты в одном модуле. когда в локальном env можно проверить с помощью visualvm, что с никогда не общий контекст, но он также создает 2000+ потоков (в то время как forkMode = один раз около 20), почему многие неудачи тестов –
njjnex
вы пытались установить 'threadCount = 1'? –