Неожиданное попадание в кэш контекста приложения при тестировании с помощью макета веб-среды SpringBootTest и DEFINED_PORT

#spring-boot #spring-boot-test

#весенняя загрузка #spring-boot-test

Вопрос:

При написании весенних тестов с использованием обоих @SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.MOCK) и @SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.DEFINED_PORT) я вижу, что тесты повторно используют один и тот же контекст приложения.

 @SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.DEFINED_PORT)
class DemoApplicationTestsDefinedPort {
    @Test
    void testDefinedPort() {}
}

@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.MOCK)
class DemoApplicationTestsMock {
    @Test
    void mockTest() {}
}
  

С logging.level.org.springframework.test.context.cache=DEBUG соответствующим выводом журнала:

 ...
Storing ApplicationContext [912966811] in cache under key [[WebMergedContextConfiguration@74287ea3 testClass = DemoApplicationTestsDefinedPort, ...]]
...
Retrieved ApplicationContext [912966811] from cache with key [[WebMergedContextConfiguration@4dad8ec0 testClass = DemoApplicationTestsMock, ...]]
...
  

testDefinedPort ожидается, что реальный сервер будет запущен на порту, указанном server.port . Однако, в зависимости от порядка выполнения, testDefinedPort вместо этого может повторно использоваться контекст приложения, созданный mockTest . Ожидается ли такое поведение?

Обновление: поднято и идентифицировано как ошибка —https://github.com/spring-projects/spring-boot/issues/23085

Комментарии:

1. Я бы предложил зарегистрировать проблему в трекере проблем Spring Boot. Я понимаю, почему он повторно использует контекст, но я сомневаюсь, что это произойдет.

2. Я только что поднял проблему здесь github.com/spring-projects/spring-boot/issues/23085