当作为参数传递时如何模拟依赖?



我们创建了一个公共类,其中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));
}

如果这不是你想要的,请提供你想要测试的更多细节。谢谢。

最新更新