Обратите внимание, что, сохраняя любое состояние из текущего ApplicationContext
или самого ApplicationContext
в статической переменной - например, с помощью шаблона singleton - вы сделаете ваши тесты нестабильными и непредсказуемыми, если вы используете Spring-test , Это связано с тем, что Spring-test кэширует и повторно использует контексты приложения в той же JVM. Например:
- Тест Выполнение, и оно помечено
@ContextConfiguration({"classpath:foo.xml"})
.
- Выполнен тест B и он помечен
@ContextConfiguration({"classpath:foo.xml", "classpath:bar.xml})
- Выполнен тестовый С, и он помечен
@ContextConfiguration({"classpath:foo.xml"})
При запуске теста A создается ApplicationContext
, и любые bean-компоненты, реализующие ApplicationContextAware
или автоматическое подключение ApplicationContext
, могут записывать в статическую переменную.
Когда выполняется тест B, происходит то же самое, и статическая переменная теперь указывает на тест B ApplicationContext
Когда выполняется тест C, никакие компоненты не создаются , так как TestContext
(и в данном документе ApplicationContext
) из теста A используется повторно. Теперь вы получили статическую переменную, указывающую на ApplicationContext
, отличную от той, которая в данный момент содержит компоненты для вашего теста.