在我的连接器类中,我使用 Spring 将带有主体的 API GET 调用下游到另一个服务,如下所示。
WebClient
我要用下面的测试用例来测试它:
public Mono<SampleResponse> getSampleResponse(final int id, final SampleRequest sampleRequest) {
return webclient
.method(HttpMethod.GET)
.uri("get/sample/{id}", id)
.body(Mono.just(sampleRequest), SampleRequest .class)
.accept(MediaType.APPLICATION_JSON)
.retrieve()
.onStatus(HttpStatus.NOT_FOUND::equals, r -> Mono.empty())
.onStatus(HttpStatus::isError, r -> Mono.empty())
.bodyToMono(SampleResponse.class)
.doOnError(throwable -> log.error(EXTERNAL_SERVICE_ERROR, throwable.getMessage()));
}
我的考试不及格。
private MockWebServer server;
private SampleResponseConnector connector;
@BeforeEach
void setup() {
server = new MockWebServer();
ReactiveWebClientConnectorFactory factory = new ReactiveWebClientConnectorFactory();
connector = new SampleResponseConnector (factory.createWebClient(
server.url("/").toString(), "", null, null, null));
}
@Test
public void getSampleResponse_callsDownstreamSuccessfully() {
Random random = new Random();
int id = random.nextInt(10);
mockResponse("{\"available\":[\"CUSTOMER_ADDRESS\",\"CUSTOMER_QUERY\"]}");
SampleRequest request = SampleRequest .builder().build();
StepVerifier.create(connector.getSampleResponse(id, request))
.expectNextMatches(response -> response.getAvailable().equals(List.of("CUSTOMER_ADDRESS", "CUSTOMER_QUERY")))
.verifyComplete();
}
private void mockResponse(String json) {
MockResponse response = new MockResponse();
response.setHeader("Content-Type", "application/json");
response.setBody(json);
server.enqueue(response);
}
任何指针将不胜感激。