@WebFluxTest выдает org.springframework.boot.контекст.свойства.привязка.Связующее не было зарегистрировано ошибка в конвейере Дженкинса

#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. Выявил проблему, когда прокомментировал тест основного класса. Это была проблема с тестом основного класса, которая вызвала сбой для всех других тестов, связанных с загрузкой контекста приложения.