Java 模仿泛型

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<>();

我使用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<>();
        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)
我不确定错误的原因是什么,以及如何理解这个错误。 还有,有没有合适的方法来测试这种方法