2015-08-12 3 views
1

Мы используем RestTemplate для использования внешних служб отдыха. В нашем проекте много разных видов услуг, и все они тестируются с использованием разных стратегий, таких как смешной шаблон для отдыха и насмехание нашего объекта связи.Как уничтожить MockRestServiceServer?

Мы использовали ниже код в нашем тесте, чтобы проверить одну услугу с помощью MockRestServiceServer:

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

Итак, наш вопрос: Есть ли способ, чтобы уничтожить этот сервер как только этот тест завершается так это не влияет на другие тестовые случаи?

ответ

4

Прежде всего, MockRestServiceServer не является реальным сервером - например, он не прослушивает порт TCP. Единственное, что делает MockRestServiceServer, это изменить ваш RestTemplate (см. Подробности ниже).

Итак, чтобы ответить на ваш вопрос: нет сервера destroy.

Однако ... если ваш RestTemplate создаются в ApplicationContext и вводит в нескольких компонентов (например, в вашем слое службы), вы можете сбросить начальное состояние RestTemplate. Если это так, то читайте дальше ...

Там в настоящее время нет «официального» способа сброс в RestTemplateMockRestServiceServer.createServer() передаются, но это не значит, что вы не можете реализовать такую ​​функцию по своему усмотрению.

Ключ к пониманию этого является знание того, что метод MockRestServiceServer.createServer() заменяет ClientHttpRequestFactory в поставленном RestTemplate с издевались версии (то есть, частное, внутреннее 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); 
} 

Сообщите мне, если это решает вашу проблему!

Приветствия,

Сэм (автор весеннего TestContext Framework)

+0

Спасибо много. Это работает как шарм. Спасибо за подробное объяснение. –

+0

@TusharPatel вы должны отметить как принятый этот ответ :) –

Смежные вопросы