我们正在使用RestTemplate来使用外部休息服务。我们的项目中有很多不同类型的服务,所有服务都使用不同的策略进行测试,比如模拟休息模板和模拟我们的通信对象。
我们在测试用例中使用了以下代码来使用MockRestServiceServer测试一个服务:
RestTemplate restTemplate = new RestTemplate();
mockServer = MockRestServiceServer.createServer(restTemplate);
所以我们的问题是: 有一种方法可以在此测试用例完成后立即销毁此服务器,这样就不会影响其他测试用例吗?
答案 0 :(得分:5)
首先,MockRestServiceServer
不是真正的服务器 - 例如,它不是在侦听TCP端口。 MockRestServiceServer
唯一要做的就是修改您的RestTemplate
(请参阅下面的详细信息)。
所以回答你的问题:没有服务器来销毁。
但是......如果您的RestTemplate
中创建ApplicationContext
并注入多个组件(例如,在您的服务层中),您可能需要重置{{1}的初始状态}}。如果是这种情况,请继续阅读......
目前没有“官方”方式重置传递给RestTemplate
的{{1}},但这并不意味着您无法在您的身上实现此类功能自己的。
理解这一点的关键是知道RestTemplate
方法用模拟的版本替换了提供的MockRestServiceServer.createServer()
中的MockRestServiceServer.createServer()
(即私有,内部ClientHttpRequestFactory
)。
因此,您应该能够重置 RestTemplate
的原始状态,方法是跟踪原始请求工厂并在测试后将其设置在模板中。以下内容应该有效:
MockRestServiceServer.RequestMatcherClientHttpRequestFactory
如果能解决您的问题,请告诉我!
干杯,
Sam( Spring TestContext Framework的作者)