我们创建了一个公共类,其中RestTemplate作为参数传递。这个rest模板用于方便:
- postForEntity
然而,由于它不是在公共类中自动连接的,所以我不能创建模拟RestTemplate的单元测试。有解决这个问题的方法吗?
设置:Spring启动项目A——启动rest集成并使用公共类。项目A实例化了@Autowired RestTemplate rest模板,并将其作为参数传递给公共类方法。
Spring boot Common Class -执行rest集成,但是使用Project a传递的rest模板。这个公共类我不能进行单元测试,因为我不能模拟rest模板。
这是一个java spring启动项目。
附录:
* *常见类
public class RestService {
public static void invoke(RestTemplate restTemplate, RequestDetails requestDetails) {
switch (requestDetails.getHttpMethod()) {
case POST:
HttpEntity<?> postEntity = new HttpEntity<>(request, httpHeaders);
restResponse = restTemplate.postForEntity(requestDetails.getUrl(), postEntity, String.class);
break;
case GET:
HttpEntity<?> getEntity = new HttpEntity<>(httpHeaders);
restResponse = restTemplate.exchange(requestDetails.getUrl(),
HttpMethod.GET, getEntity, String.class);
break;
default:
break;
}
}
}
**调用CLASS
public class InvokingClass {
@Autowired
private RestTemplate restTemplate;
public void invoke() {
//RequestDetails construct here ...
RestService.invoke(restTemplate,requestDetails)
}
}
我不知道你想达到什么目的。如果你想测试你的RestService
,你应该能够这样做:
@Test
void test() {
RestTemplate templateMock = mock(RestTemplate.class);
RestService.invoke(templateMock, new RequestDetails());
verify(templateMock).postForEntity(any(URI.class), any(Object.class), any(Class.class));
}
如果这不是你想要的,请提供你想要测试的更多细节。谢谢。