Ответ
Поведение зависит от конфигурации тестов и оптимизаций Spring.
- По умолчанию: Каждый тестовый класс с
@SpringBootTestзапускает загрузку своего собственногоApplicationContext. Это может быть неэффективно. - Кэширование контекста: Spring Test кэширует и переиспользует контексты между тестами, если их конфигурация идентична. Конфигурация определяется параметрами аннотации:
classes,properties,webEnvironmentи другими атрибутами@SpringBootTest.
Пример:
// Конфигурация идентична -> Spring, скорее всего, создаст и переиспользует ОДИН контекст
@SpringBootTest
class UserServiceTest { /* ... */ }
@SpringBootTest
class OrderServiceTest { /* ... */ }
// Разная конфигурация -> будут созданы ДВА разных контекста
@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT)
class WebControllerTest { /* ... */ }
Управление кэшированием: Чтобы гарантированно создать новый контекст для каждого тестового класса (например, для изоляции), используйте аннотацию @DirtiesContext.
@SpringBootTest
@DirtiesContext(classMode = DirtiesContext.ClassMode.AFTER_CLASS)
class IsolatedTest { /* Контекст будет закрыт после этого класса */ }