首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何摧毁MockRestServiceServer?

如何摧毁MockRestServiceServer?
EN

Stack Overflow用户
提问于 2015-08-12 06:22:26
回答 1查看 2.9K关注 0票数 4

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

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

代码语言:javascript
复制
RestTemplate restTemplate = new RestTemplate();    
mockServer = MockRestServiceServer.createServer(restTemplate);

因此,我们的问题是:在测试用例完成后,是否有一种方法可以摧毁该服务器,从而不影响其他测试用例?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-08-13 12:45:09

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

所以,回答你的问题:没有服务器可以摧毁。

然而..。如果您的RestTemplate是在ApplicationContext中创建并注入到多个组件中(例如,在服务层中),则可能需要重置RestTemplate的初始状态。如果是这样的话,继续读下去.

目前没有任何“官方”方法来重置传递给RestTemplateMockRestServiceServer.createServer(),但这并不意味着您无法单独实现这样的特性。

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

因此,您应该能够通过跟踪原始请求工厂并在测试后将其设置在模板中来重置RestTemplate的原始状态。下面这样的东西应该能起作用:

代码语言:javascript
复制
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框架的作者)

票数 13
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/31957447

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档