作为参数传递时如何模拟依赖项?
How to mock an dependency when passed as an argument?
我们创建了一个公共 class,其中将 RestTemplate 作为参数传递。此休息模板用于方便:
- postForEntity
- 交流
但是,由于它不是在常见的 class 中自动装配的,所以我无法创建模拟 RestTemplate 的单元测试。有解决办法吗?
设置:
Spring 引导项目 A - 启动休息集成并利用公共 class。本项目A实例化@Autowired RestTemplate rest模板,并将其作为参数传递给常用的class方法
Spring boot Common Class - 进行 rest 集成,但使用项目 A 传递的 rest 模板。这个 common class 我无法进行单元测试,因为我不能模拟 Rest 模板。
这是一个 java spring 引导项目。
附录:
**常见 CLASS
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));
}
如果这不是您要查找的内容,请提供有关您要测试的内容的更多详细信息。谢谢
我们创建了一个公共 class,其中将 RestTemplate 作为参数传递。此休息模板用于方便:
- postForEntity
- 交流
但是,由于它不是在常见的 class 中自动装配的,所以我无法创建模拟 RestTemplate 的单元测试。有解决办法吗?
设置:
Spring 引导项目 A - 启动休息集成并利用公共 class。本项目A实例化@Autowired RestTemplate rest模板,并将其作为参数传递给常用的class方法
Spring boot Common Class - 进行 rest 集成,但使用项目 A 传递的 rest 模板。这个 common class 我无法进行单元测试,因为我不能模拟 Rest 模板。
这是一个 java spring 引导项目。
附录:
**常见 CLASS
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));
}
如果这不是您要查找的内容,请提供有关您要测试的内容的更多详细信息。谢谢