#spring #spring-boot #jenkins #spring-webflux #spring-cloud-gcp
Вопрос:
Я создал приложение Spring WebFlux (Аннотированная модель контроллера), которое интегрируется с облачными сервисами Google с указанными ниже версиями библиотек. Я написал тест для класса контроллера, и когда он запускается на моей локальной машине, он запускается без каких-либо проблем. Но когда тот же тест выполняется на конвейере Дженкинса, он выдает ошибку, которая не была зарегистрирована.
Версия Spring Boot — 2.5.5
Версия Spring Cloud GCP — 2.0.4
Ошибка, которая выводится на консоль Дженкинса, выглядит следующим образом
[ERROR] com.test.controller.ControllerTest.shouldPostRequestToEndpoint Time elapsed: 0.001 s lt;lt;lt; ERROR! java.lang.IllegalStateException: Failed to load ApplicationContext Caused by: java.lang.IllegalStateException: org.springframework.boot.context.properties.bind.Binder has not been registered
Самое непонятное, что эта проблема возникает только в экземпляре Дженкинса, а не на моей локальной машине, и это очень затрудняет отладку. Я не совсем понимаю, почему это так выглядит. Кроме того, не знаю, как зарегистрировать здесь какую-либо папку. Если бы я мог получить какую-либо помощь/указания о том, где может быть проблема или как ее отлаживать, это было бы очень полезно.
Образец контроллера и класс ControllerTest можно найти ниже.
Controller.java
@RestController public class Controller { private final Service service; @Autowired public Controller(Service service) { this.service = service; } @PostMapping("/test") public Monolt;Stringgt; test() { return service.test(LocalDateTime.now()) .then(Mono.just("SUCCESS")); } }
ControllerTest.java
@WebFluxTest(controllers = Controller.class) public class ControllerTest { @MockBean Service service; @Autowired WebTestClient webTestClient; @Test public void shouldPostRequestToEndpoint() { given(service.test(any(LocalDateTime.class))).willReturn(empty()); webTestClient .post() .uri("/test") .exchange() .expectStatus().isOk() .expectBody(String.class); } }
Даже если вы, ребята, укажете мне, какую папку нужно зарегистрировать, это было бы здорово.
Заранее спасибо!
Ответ №1:
Похоже, весенний контекст не может загрузиться. Отличается ли ваша версия JUnit от локальной и CI? Если вы используете JUnit4, попробуйте добавить @RunWith(SpringRunner.class)
его в свой тест.
Комментарии:
1. Я использую JUnit5, и в @WebFluxTest уже есть @ExtendWith({SpringExtension.class}) с комментариями к нему. Не могли бы вы предложить мне что-нибудь для JUnit5?
2. Устранение неполадок здесь придется начинать с загрузки контекста приложения Spring. Посмотрите на вывод Дженкинса и сравните его с локальным выводом-найдите различия в загрузке контекста Spring.
3. Выявил проблему, когда прокомментировал тест основного класса. Это была проблема с тестом основного класса, которая вызвала сбой для всех других тестов, связанных с загрузкой контекста приложения.