单元测试用例MockRestServiceServer期望的url不能与RestTemplate一起使用

时间:2016-08-09 09:27:42

标签: java spring rest unit-testing

我测试了一个验证url

的url类
class ValidateUrl {
    public Integer validateUrl(String url, int timeOut) throws Exception {
        String url;
        private RestTemplate restTemplate = new RestTemplate();
        try {
            ((SimpleClientHttpRequestFactory)restTemplate.getRequestFactory()).setConnectTimeout(1000 * timeOut);
            ResultClass result = restTemplate.postForObject(url, null, ResultClass.class);
            if(result!= null) {
                return result.getErrorCode();
            }

        } catch (Exception e) {
            log.error("Error"+ e);
        }
        return -1;

    }
}

我已经创建了一个测试类的测试用例  ValidateUrlTest我在哪里验证网址

@Autowire
private ValidateUrl validateUrlInstance

private String url = "https://testingurl.com";
private String result = "{\"result\" : \"-1\"}";

@Test
public void validateUrlTest() throws Exception{
    SimpleClientHttpRequestFactory factory = new SimpleClientHttpRequestFactory();
    RestTemplate template = new RestTemplate(factory);
    MockRestServiceServer server = MockRestServiceServer.createServer(template);
    server.expect(requestTo(url))
            .andRespond(given());
    int i= validateUrlInstance.validateUrl(url, 2);
    server.verify();

}
但是得到了  java.lang.AssertionError:预期的进一步请求    [testng] 0中的0个被执行

1 个答案:

答案 0 :(得分:1)

您正在嘲笑的RestTemplate实例不是ValidateUrl类中使用的实例。

你应该注入它,而不是直接在方法中进行直接感染。

public class ValidateUrl {

    private RestTemplate restTemplate;

    @Autowired
    public ValidateUrl(RestTemplate restTemplate) {
        this.restTemplate = restTemplate;
    }

    public Integer validateUrl(String url, int timeOut) throws Exception {
     ...
    }
}