TestNG: используйте ApplicationContext в нескольких тестовых классах

Я написал несколько тестов внутри одного теста TestNG, который расширяет AbstractTestNGSpringContextTests. ApplicationContext настроен правильно, и я могу использовать его в своих тестовых примерах.

Проблема в том, что настройка applicationContext может занять некоторое время, и я не хочу делать это для каждого имеющегося у меня тестового класса, так как это займет некоторое время, которое, с моей точки зрения, не нужно.

Итак, мой вопрос: возможно ли запустить более одного тестового класса TestNG, используя один и тот же Spring ApplicationContext, который настраивается только один раз?

Спасибо и с наилучшими пожеланиями, Роберт


person Robert M.    schedule 27.09.2011    source источник


Ответы (3)


Как насчет использования @BeforeSuite?

person Cedric Beust    schedule 28.09.2011
comment
Спасибо :) Не знаю, почему я никогда раньше не натыкался на эту конкретную аннотацию. Теперь я смог поделиться своим ApplicationContext и Selenium Webdriver для повторного использования с помощью @BeforeSuite. - person Robert M.; 29.09.2011

Spring может кэшировать и повторно использовать ApplicationContext, когда вы используете аналогичные locations в @ContextConfiguration аннотациях. См. соответствующую статью Томаша Нуркевича (@tomasz-nurkiewicz) по адресу http://nurkiewicz.blogspot.com/2010/12/speeding-up-spring-integration-tests.html

person Slava Semushin    schedule 02.10.2011

Как только платформа TestContext загрузит ApplicationContext (или WebApplicationContext) для теста, этот контекст будет кэширован и повторно использован для всех последующих тестов, которые объявляют ту же уникальную конфигурацию контекста в том же наборе тестов.

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

Чтобы воспользоваться преимуществами механизма кэширования, все тесты должны выполняться в рамках одного процесса или набора тестов. Этого можно достичь, выполняя все тесты как группу в среде IDE. Точно так же при выполнении тестов с помощью такой среды сборки, как Ant, Maven или Gradle, важно убедиться, что среда сборки не разветвляется между тестами. Например, если для forkMode для подключаемого модуля Maven Surefire установлено значение «всегда» или «пертест», платформа TestContext не сможет кэшировать контексты приложений между тестовыми классами, и в результате процесс сборки будет выполняться значительно медленнее.

person Trinadh Sidda    schedule 03.01.2018