Я написал несколько тестов внутри одного теста TestNG, который расширяет AbstractTestNGSpringContextTests. ApplicationContext настроен правильно, и я могу использовать его в своих тестовых примерах.
Проблема в том, что настройка applicationContext может занять некоторое время, и я не хочу делать это для каждого имеющегося у меня тестового класса, так как это займет некоторое время, которое, с моей точки зрения, не нужно.
Итак, мой вопрос: возможно ли запустить более одного тестового класса TestNG, используя один и тот же Spring ApplicationContext, который настраивается только один раз?
Спасибо и с наилучшими пожеланиями, Роберт
Ответ 3 · рейтинг 1 · Trinadh Sidda
Как только платформа TestContext загрузит ApplicationContext (или WebApplicationContext) для теста, этот контекст будет кэширован и повторно использован для всех последующих тестов, которые объявляют ту же уникальную конфигурацию контекста в том же наборе тестов.
Платформа Spring TestContext хранит контексты приложений в статическом кеше. Это означает, что контекст буквально хранится в статической переменной. Другими словами, если тесты выполняются в отдельных процессах, статический кеш будет очищаться между каждым выполнением теста, и это фактически отключит механизм кэширования.
Чтобы воспользоваться преимуществами механизма кэширования, все тесты должны выполняться в рамках одного процесса или набора тестов. Этого можно достичь, выполняя все тесты как группу в среде IDE. Точно так же при выполнении тестов с помощью такой среды сборки, как Ant, Maven или Gradle, важно убедиться, что среда сборки не разветвляется между тестами. Например, если для forkMode для подключаемого модуля Maven Surefire установлено значение "всегда" или "пертест", платформа TestContext не сможет кэшировать контексты приложений между тестовыми классами, и в результате процесс сборки будет выполняться значительно медленнее.