如何销毁 MockRestServiceServer?
How to destroy MockRestServiceServer?
我们正在使用 RestTemplate 来使用外部休息服务。我们的项目中有很多不同类型的服务,所有这些服务都使用不同的策略进行测试,例如模拟 rest 模板和模拟我们的通信对象。
我们在测试用例中使用了以下代码来测试使用 MockRestServiceServer 的一项服务:
RestTemplate restTemplate = new RestTemplate();
mockServer = MockRestServiceServer.createServer(restTemplate);
所以我们的问题是:
有没有办法在这个测试用例完成后立即销毁这个服务器,这样就不会影响其他测试用例?
首先,MockRestServiceServer
不是真正的服务器——例如,它没有在 TCP 端口上侦听。 MockRestServiceServer
所做的唯一一件事就是修改您的 RestTemplate
(请参阅下面的详细信息)。
所以回答你的问题:没有服务器可以销毁。
但是...如果您的 RestTemplate
是在您的 ApplicationContext
中创建并注入到多个组件中(例如,在您的服务层中),您可能需要重置 RestTemplate
。如果是这样,请继续阅读...
目前没有 "official" 方法来 重置 传递给 MockRestServiceServer.createServer()
的 RestTemplate
,但这并不意味着你可以'不要自己实现这样的功能。
理解这一点的关键是知道 MockRestServiceServer.createServer()
方法将提供的 RestTemplate
中的 ClientHttpRequestFactory
替换为 mocked 版本(即,私有的内部 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 Framework 的作者)
我们正在使用 RestTemplate 来使用外部休息服务。我们的项目中有很多不同类型的服务,所有这些服务都使用不同的策略进行测试,例如模拟 rest 模板和模拟我们的通信对象。
我们在测试用例中使用了以下代码来测试使用 MockRestServiceServer 的一项服务:
RestTemplate restTemplate = new RestTemplate();
mockServer = MockRestServiceServer.createServer(restTemplate);
所以我们的问题是: 有没有办法在这个测试用例完成后立即销毁这个服务器,这样就不会影响其他测试用例?
首先,MockRestServiceServer
不是真正的服务器——例如,它没有在 TCP 端口上侦听。 MockRestServiceServer
所做的唯一一件事就是修改您的 RestTemplate
(请参阅下面的详细信息)。
所以回答你的问题:没有服务器可以销毁。
但是...如果您的 RestTemplate
是在您的 ApplicationContext
中创建并注入到多个组件中(例如,在您的服务层中),您可能需要重置 RestTemplate
。如果是这样,请继续阅读...
目前没有 "official" 方法来 重置 传递给 MockRestServiceServer.createServer()
的 RestTemplate
,但这并不意味着你可以'不要自己实现这样的功能。
理解这一点的关键是知道 MockRestServiceServer.createServer()
方法将提供的 RestTemplate
中的 ClientHttpRequestFactory
替换为 mocked 版本(即,私有的内部 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 Framework 的作者)