[英]How to mock an dependency when passed as an argument?
我们创建了一个通用类,其中将 RestTemplate 作为参数传递。 这个休息模板用于促进:
但是,由于它不是在公共类中自动装配的,因此我无法创建模拟 RestTemplate 的单元测试。 有解决办法吗?
设置:
Spring boot 项目 A - 启动一个 rest 集成并利用公共类。 这个项目 A 实例化了@Autowired RestTemplate 休息模板,并将其作为参数传递给公共类方法。
Spring boot Common Class - 进行其余集成,但使用项目 A 传递的其余模板。这个公共类我无法进行单元测试,因为我无法模拟 Rest Template。
这是一个 java spring boot 项目。
附录:
**普通班
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;
}
}
}
** 调用类
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));
}
如果这不是您要查找的内容,请提供有关您要测试的内容的更多详细信息。 谢谢。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.