Java 模仿泛型
我使用WebClient从外部API查询数据: 我跟着这个 以下是我的方法:Java 模仿泛型,java,mockito,spring-webflux,spring-webclient,Java,Mockito,Spring Webflux,Spring Webclient,我使用WebClient从外部API查询数据: 我跟着这个 以下是我的方法: public Flux<SampleDto> fetchData(String type, List<Integer> someIds) { // type must be either classId or fundId Map<String, List<Integer>> params = new HashMap<>();
public Flux<SampleDto> fetchData(String type, List<Integer> someIds) {
// type must be either classId or fundId
Map<String, List<Integer>> params = new HashMap<>();
params.put(type, someIds);
String url = someBean.getUrl();
UriSpec<RequestBodySpec> uriSpec = webClient.method(HttpMethod.POST);
RequestBodySpec bodySpec = uriSpec.uri(url);
RequestHeadersSpec<?> headersSpec = bodySpec.bodyValue(params);
return headersSpec
.retrieve()
.bodyToFlux(SampleDto.class)
.onErrorResume(err -> Flux.error(new DataSourceException(
String.format("Unable to fetch data. Error: %s", err.getMessage())
)));
}
公共流量获取数据(字符串类型,列表ID){
//类型必须是classId或fundId
Map params=新的HashMap();
参数put(类型,someid);
字符串url=someBean.getUrl();
UriSpec UriSpec=webClient.method(HttpMethod.POST);
RequestBodySpec bodySpec=uriSpec.uri(url);
RequestHeadersSpec headersSpec=bodySpec.bodyValue(参数);
返回头规格
.retrieve()
.bodyToFlux(样本到类)
.onErrorResume(错误->通量.error(新数据源异常(
String.format(“无法获取数据。错误:%s”,err.getMessage())
)));
}
以下是我的测试用例:
@Test
public void testFetchData() {
String sampleUrl = "sampleUrl";
when(someMockedBean.getUrl()).thenReturn(sampleUrl);
RequestBodyUriSpec mockUriSpec = mock(RequestBodyUriSpec.class);
RequestBodySpec mockBodySpec = mock(RequestBodySpec.class);
RequestHeadersSpec<?> mockHeadersSpec = mock(RequestHeadersSpec.class);
ResponseSpec mockResponseSpec = mock(ResponseSpec.class);
Flux<SampleDto> sampleOutput = Flux.just(new SampleDto());
when(webClient.method(HttpMethod.POST)).thenReturn(mockUriSpec);
when(mockUriSpec.uri(sampleUrl)).thenReturn(mockBodySpec);
when(mockBodySpec.bodyValue(anyMap())).thenReturn(mockHeadersSpec); // Error Here
when(mockHeadersSpec.retrieve()).thenReturn(mockResponseSpec);
when(mockResponseSpec.bodyToFlux(SampleDto.class)).thenReturn(sampleOutput);
Flux<SampleDto> result = someService.fetchData("", new ArrayList<>());
verify(webClient, times(1)).method(HttpMethod.POST);
verify(mockUriSpec, times(1)).uri(sampleUrl);
assertNotNull(result);
}
@测试
公共void testFetchData(){
字符串sampleUrl=“sampleUrl”;
when(someMockedBean.getUrl()).thenReturn(sampleUrl);
RequestBodyUriSpec mockUriSpec=mock(RequestBodyUriSpec.class);
RequestBodySpec mockBodySpec=mock(RequestBodySpec.class);
RequestHeadersSpec mockHeadersSpec=mock(RequestHeadersSpec.class);
ResponseSpec mockResponseSpec=mock(ResponseSpec.class);
Flux-sampleOutput=Flux.just(new-SampleDto());
when(webClient.method(HttpMethod.POST)),然后return(mockUriSpec);
when(mockUriSpec.uri(sampleUrl)).thenReturn(mockBodySpec);
when(mockBodySpec.bodyValue(anyMap()).thenReturn(mockHeadersSpec);//此处出错
当(mockHeadersSpec.retrieve())。然后返回(mockResponseSpec);
当(mockResponseSpec.bodyToFlux(SampleDto.class)),然后返回(sampleOutput);
Flux result=someService.fetchData(“,new ArrayList());
验证(webClient,times(1)).method(HttpMethod.POST);
验证(mockUriSpec,times(1)).uri(sampleUrl);
assertNotNull(结果);
}
我得到的错误是:
java: no suitable method found for thenReturn(org.springframework.web.reactive.function.client.WebClient.RequestHeadersSpec<capture#1 of ?>)
method org.mockito.stubbing.OngoingStubbing.thenReturn(org.springframework.web.reactive.function.client.WebClient.RequestHeadersSpec<capture#2 of ?>) is not applicable
(argument mismatch; org.springframework.web.reactive.function.client.WebClient.RequestHeadersSpec<capture#1 of ?> cannot be converted to org.springframework.web.reactive.function.client.WebClient.RequestHeadersSpec<capture#2 of ?>)
method org.mockito.stubbing.OngoingStubbing.thenReturn(org.springframework.web.reactive.function.client.WebClient.RequestHeadersSpec<capture#2 of ?>,org.springframework.web.reactive.function.client.WebClient.RequestHeadersSpec<capture#2 of ?>...) is not applicable
(argument mismatch; org.springframework.web.reactive.function.client.WebClient.RequestHeadersSpec<capture#1 of ?> cannot be converted to org.springframework.web.reactive.function.client.WebClient.RequestHeadersSpec<capture#2 of ?>)
java:找不到适合thenReturn的方法(org.springframework.web.reactive.function.client.WebClient.RequestHeadersSpec)
方法org.mockito.stubing.ongoingstubing.thenReturn(org.springframework.web.reactive.function.client.WebClient.RequestHeadersSpec)不适用
(参数不匹配;org.springframework.web.reactive.function.client.WebClient.RequestHeadersSpec无法转换为org.springframework.web.reactive.function.client.WebClient.RequestHeadersSpec)
方法org.mockito.stubing.ongoingstubing.thenReturn(org.springframework.web.reactive.function.client.WebClient.RequestHeadersSpec,org.springframework.web.reactive.function.client.WebClient.RequestHeadersSpec…)不适用
(参数不匹配;org.springframework.web.reactive.function.client.WebClient.RequestHeadersSpec无法转换为org.springframework.web.reactive.function.client.WebClient.RequestHeadersSpec)
我不确定错误的原因是什么,以及如何理解这个错误。
还有,有没有合适的方法来测试这种方法