我们使用RestTemplate来使用外部rest服务。在我们的项目中有很多不同类型的服务,所有这些服务都使用不同的策略进行测试,比如模拟rest模板和模拟我们的通信对象。
我们在测试用例中使用了下面的代码来使用MockRestServiceServer测试一个服务:
RestTemplate restTemplate = new RestTemplate();
mockServer = MockRestServiceServer.createServer(restTemplate);因此,我们的问题是:在测试用例完成后,是否有一种方法可以摧毁该服务器,从而不影响其他测试用例?
发布于 2015-08-13 12:45:09
首先,MockRestServiceServer不是真正的服务器--例如,它没有监听TCP端口。MockRestServiceServer所做的唯一事情就是修改您的RestTemplate (请参阅下面的详细信息)。
所以,回答你的问题:没有服务器可以摧毁。
然而..。如果您的RestTemplate是在ApplicationContext中创建并注入到多个组件中(例如,在服务层中),则可能需要重置RestTemplate的初始状态。如果是这样的话,继续读下去.
目前没有任何“官方”方法来重置传递给RestTemplate的MockRestServiceServer.createServer(),但这并不意味着您无法单独实现这样的特性。
理解这一点的关键是知道MockRestServiceServer.createServer()方法用一个模拟版本(即私有的内部MockRestServiceServer.RequestMatcherClientHttpRequestFactory)替换了提供的RestTemplate中的ClientHttpRequestFactory。
因此,您应该能够通过跟踪原始请求工厂并在测试后将其设置在模板中来重置RestTemplate的原始状态。下面这样的东西应该能起作用:
RestTemplate restTemplate = // likely injected into the test
ClientHttpRequestFactory originalRequestFactory = restTemplate.getRequestFactory();
MockRestServiceServer mockServer = MockRestServiceServer.createServer(restTemplate);
try {
// use mockServer as usual...
mockServer.verify();
} finally {
restTemplate.setRequestFactory(originalRequestFactory);
}如果这能解决你的问题,请告诉我!
干杯,
Sam ( Spring TestContext框架的作者)
https://stackoverflow.com/questions/31957447
复制相似问题