gpt4 book ai didi

Java Mockito 与 RestTemplate.exchange 使用泛型

转载 作者:行者123 更新时间:2023-12-02 01:31:42 32 4
gpt4 key购买 nike

我有一个通用方法,它使用 RestTemplate.exchange 调用指定的 URL。方法本身可以正常工作并加载数据,但我无法使用 Mockito 对它进行单元测试。

主要方法

@Service
public class MyClass{
private <T> List<T> loadData(String url) {
return restTemplate.exchange(
url, GET, null, new ParameterizedTypeReference<List<T>>(){}
).getBody().stream().collect(toList()));
}
}

单元测试

@Runwith(MockitoJUnitRunner.class)
public class MyTest {
@Mock
private RestTemplate restTemplate;

@Test
public void givenCall_myMethod_WillReturnData(){
given(restTemplate.exchange(
ArgumentMatchers.anyString(), ArgumentMatchers.any(), any(), any(Class.class)
))
.willReturn(bodyData());
}
}

如果我使用非泛型版本,那么一切正常,但是mockito返回带有泛型版本的NullPointerException

有什么问题或缺失吗?

最佳答案

您定义的最后一个通配符为:any(Class.class)

交换方法有签名:

exchange(String url,
HttpMethod method,
HttpEntity<?> requestEntity,
ParameterizedTypeReference<T> responseType) throws RestClientException

您应该将其定义为:any(ParameterizedTypeReference.class)

此外,我建议将非常模糊的 any() set-us 替换为 any(Class) 等效项。

关于Java Mockito 与 RestTemplate.exchange 使用泛型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55950349/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com