我们正在使用 RestTemplate 来消费外部休息服务。我们的项目中有很多不同类型的服务,所有这些服务都使用不同的策略进行测试,例如模拟休息模板和模拟我们的通信对象。
我们在测试用例中使用了以下代码来使用 MockRestServiceServer 测试一项服务:
RestTemplate restTemplate = new RestTemplate();
mockServer = MockRestServiceServer.createServer(restTemplate);
所以我们的问题是:
有没有办法在此测试用例完成后立即销毁此服务器,以免影响其他测试用例?
最佳答案
首先,MockRestServiceServer
不是真正的服务器——例如,它没有监听 TCP 端口。唯一的MockRestServiceServer
做的是修改你的RestTemplate
(详见下文)。
所以回答你的问题:没有要销毁的服务器。
但是...如果您的 RestTemplate
在您的 ApplicationContext
中创建并注入(inject)多个组件(例如,在您的服务层中),您可能需要重置 RestTemplate
的初始状态.如果是这种情况,请继续阅读...
当前没有“官方”方式来重置 RestTemplate
传递给 MockRestServiceServer.createServer()
,但这并不意味着您不能自己实现这样的功能。
理解这一点的关键是知道 MockRestServiceServer.createServer()
方法替换 ClientHttpRequestFactory
在提供的RestTemplate
使用模拟版本(即私有(private)的内部 MockRestServiceServer.RequestMatcherClientHttpRequestFactory
)。
所以你应该能够重置 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 框架的作者)
关于rest - 如何销毁 MockRestServiceServer?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31957447/