如何模拟RestTemplate的webservice响应?

时间:2017-12-08 14:05:49

标签: java spring unit-testing junit spring-test

我想在我的整个应用程序上编写集成测试,并且只想模拟一个特定的方法:Install-Package NUnit -Version 3.5.0 我用来将一些数据发送到外部Web服务并接收响应。

我想从本地文件中读取响应(模拟和模仿外部服务器响应,因此它始终是相同的。)

我的本​​地文件应该只包含外部网络服务器响应的生产中的RestTemplate响应。

问题:如何模拟外部xml响应?

json/xml

2 个答案:

答案 0 :(得分:1)

春天真是太棒了:

    @Autowired
    private RestTemplate restTemplate;

    private MockRestServiceServer mockServer;

    @Before
    public void createServer() throws Exception {
        mockServer = MockRestServiceServer.createServer(restTemplate);
    }

    @Test
    public void test() {
        String xml = loadFromFile("productsResponse.xml");
        mockServer.expect(MockRestRequestMatchers.anything()).andRespond(MockRestResponseCreators.withSuccess(xml, MediaType.APPLICATION_XML));
    }

答案 1 :(得分:0)

你可以为此实现像Mockito这样的模拟框架:

所以,在你的resttemplate模拟中你会有:

when(restTemplate.postForEntity(...))
    .thenAnswer(answer(401));

并回答类似的实现:

private Answer answer(int httpStatus) {
    return (invocation) -> {
        if (httpStatus >= 400) {
            throw new RestClientException(...);
        }
        return <whatever>;
    };
}

如需进一步阅读,请按照Mockito

进行操作