Размещение интеграционных тестов Spring в разных классах и пакетах
-
09-09-2019 - |
Вопрос
Я использую AbstractTransactionalSpringContextTests для запуска тестов интеграции Spring.Контекст Spring загружается только один раз, а затем запускаются все тесты.Как мне сделать то же самое, если я хочу, чтобы мои тесты находились во многих классах и пакетах.
Конечно, контекст Spring должен быть загружен только один раз для всех моих тестов (во всех классах и пакетах), а не один раз для каждого класса или пакета.
Решение
В качестве Javadocs для AbstractSingleSpringContextTests
(один из суперклассов AbstractTransactionalSpringContextTests
) состояние:
Этот класс будет кэшировать контексты на основе контекстного ключа:обычно конфигурация размещает массив строк, описывающий дескрипторы ресурсов Spring, составляющие контекст.Если метод setDirty() не будет вызван тестом, контекст не будет перезагружаться, даже в разных подклассах этого теста.Это особенно полезно, если ваш контекст создается медленно, например, если вы используете Hibernate и время, необходимое для загрузки сопоставлений, является проблемой.
Ваш контекст кэшируется, поэтому все остальные тесты, которые выполняются в том же загрузчике классов (т.— все остальные тесты, которые выполняются во время того же запуска теста), будут использовать кэшированный контекст.Никаких дополнительных настроек делать не нужно — все уже сделано за вас.Если вы не уверены в этом или хотите устранить неполадки, просто включите ведение журнала для org.springframework, и вы увидите множество полезных сведений о том, когда загружается контекст, какой файл и как;и т. д.