我已经构建了一个 Spring WebFlux 应用程序(带注释的控制器模型),它与具有以下提到的库版本的谷歌云服务集成。我已经为 Controller 类编写了一个测试,当它在我的本地机器上运行时,它运行没有任何问题。但是当在 Jenkins 管道上运行相同的测试时,它会抛出Binder has not been registered错误。
Spring Boot 版本 - 2.5.5
Spring Cloud GCP 版本 - 2.0.4
在 Jenkins 控制台上打印的错误如下
[ERROR] com.test.controller.ControllerTest.shouldPostRequestToEndpoint Time elapsed: 0.001 s <<< ERROR!
java.lang.IllegalStateException: Failed to load ApplicationContext
Caused by: java.lang.IllegalStateException: org.springframework.boot.context.properties.bind.Binder has not been registered
最令人困惑的是这个问题只发生在 Jenkins 实例上,而不是我的本地机器上,这使得调试变得非常困难。我不确定为什么会这样。另外,不确定如何在此处注册任何 Binder。如果我能获得有关问题可能出在哪里或如何调试的任何帮助/指导,那将非常有帮助。
示例 Controller 和 ControllerTest 类可以在下面找到。
控制器.java
@RestController
public class Controller {
private final Service service;
@Autowired
public Controller(Service service) {
this.service = service;
}
@PostMapping("/test")
public Mono<String> test() {
return service.test(LocalDateTime.now())
.then(Mono.just("SUCCESS"));
}
}
控制器测试.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);
}
}
即使你们指出我要确定哪些 Binder 需要注册,那也很棒。
提前致谢!