Junit测试用于参数化Java类的测试用例,其中请求将转到第三方端点

时间:2016-03-10 23:30:44

标签: java junit parameter-passing code-coverage

我有一个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. 

有没有办法模拟一个类调用,即不将请求发送给第三方服务,而只是收到请求并继续执行代码?

1 个答案:

答案 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(),则此示例有效。同样,您可以模拟相应控制器类的方法。