如何销毁MockRestServiceServer?

时间:2015-08-12 06:22:27

标签: rest unit-testing spring-test

我们正在使用RestTemplate来使用外部休息服务。我们的项目中有很多不同类型的服务,所有服务都使用不同的策略进行测试,比如模拟休息模板和模拟我们的通信对象。

我们在测试用例中使用了以下代码来使用MockRestServiceServer测试一个服务:

RestTemplate restTemplate = new RestTemplate();    
mockServer = MockRestServiceServer.createServer(restTemplate);

所以我们的问题是: 有一种方法可以在此测试用例完成后立即销毁此服务器,这样就不会影响其他测试用例吗?

1 个答案:

答案 0 :(得分:5)

首先,MockRestServiceServer不是真正的服务器 - 例如,它不是在侦听TCP端口。 MockRestServiceServer唯一要做的就是修改您的RestTemplate(请参阅下面的详细信息)。

所以回答你的问题:没有服务器来销毁

但是......如果您的RestTemplate中创建ApplicationContext并注入多个组件(例如,在您的服务层中),您可能需要重置{{1}的初始状态}}。如果是这种情况,请继续阅读......

目前没有“官方”方式重置传递给RestTemplate的{​​{1}},但这并不意味着您无法在您的身上实现此类功能自己的。

理解这一点的关键是知道RestTemplate方法用模拟的版本替换了提供的MockRestServiceServer.createServer()中的MockRestServiceServer.createServer()(即私有,内部ClientHttpRequestFactory)。

因此,您应该能够重置 RestTemplate的原始状态,方法是跟踪原始请求工厂并在测试后将其设置在模板中。以下内容应该有效:

MockRestServiceServer.RequestMatcherClientHttpRequestFactory

如果能解决您的问题,请告诉我!

干杯,

Sam( Spring TestContext Framework的作者