我有一个java类SendRequest.java,它有以下方法
public class SendRequest implements Transformer {
public Document transform(Document xmlToTransform,
Map<String, Object> parameters, String script) {
-- Create connection to third party
-- Create the payload request to be sent
-- Send the request to third party
-- Fetch the response from third party
-- Depending on the status code returned return either the success or error response
}
上面的方法依次进行方法调用以创建successResponse或errorResponse。
我创建的Junit测试用例不包括Java代码,最终只有50%的代码覆盖率。挑战在于模拟服务并识别参数化输入值。
的Junit
SendRequest sendRequest= new SendRequest();
Document xmlResponse = sendRequest.transform(xmlToTransform, parameters, script);
-- xmlToTransform is the input request in xml format.
有没有办法模拟一个类调用,即不将请求发送给第三方服务,而只是收到请求并继续执行代码?
答案 0 :(得分:0)
我们需要模拟将请求发送到第三方API的class
方法,例如:如果您使用的是RestTemplate
,那么您可以执行以下操作:
@Mock
protected RestTemplate restTemplate;
ResponseEntity<Map<String, Object>> responseEntity = new ResponseEntity<Map<String,Object>>(body, HttpStatus.OK);
responseEntity.getBody().putAll(<sample response body>);
Mockito.when(restTemplate.exchange(Mockito.any(String.class), Mockito.any(HttpMethod.class),
Mockito.any(HttpEntity.class), Mockito.any(ParameterizedTypeReference.class))).thenReturn(responseEntity);
如果您的班级使用RestTemplate.exchange()
,则此示例有效。同样,您可以模拟相应控制器类的方法。