Ответ 1
Как сказано в this
статьи, вы должны использовать MockMvc
, если хотите протестировать серверную сторону приложения:
Spring MVC Test основывается на mock-запросе и ответе от
spring-test
и не требует запуска контейнера сервлета. Основное отличие состоит в том, что фактическая конфигурация MVC Spring загружается через платформу TestContext и что запрос выполняется путем фактического вызоваDispatcherServlet
и все той же инфраструктуры Spring MVC, которая используется во время выполнения.
например:
@RunWith(SpringJUnit4ClassRunner.class)
@WebAppConfiguration
@ContextConfiguration("servlet-context.xml")
public class SampleTests {
@Autowired
private WebApplicationContext wac;
private MockMvc mockMvc;
@Before
public void setup() {
this.mockMvc = webAppContextSetup(this.wac).build();
}
@Test
public void getFoo() throws Exception {
this.mockMvc.perform(get("/foo").accept("application/json"))
.andExpect(status().isOk())
.andExpect(content().mimeType("application/json"))
.andExpect(jsonPath("$.name").value("Lee"));
}}
И RestTemplate
вы должны использовать, когда хотите протестировать приложение Напоминание на стороне клиента:
Если у вас есть код, использующий
RestTemplate
, вы, вероятно, захотите его протестировать, и вы сможете настроить целевой сервер или высмеять RestTemplate. Поддержка тестирования REST на стороне клиента предлагает третий вариант, который заключается в использовании фактическогоRestTemplate
, но настройте его с помощью настраиваемогоClientHttpRequestFactory
, который проверяет ожидания против фактических запросов и возвращает ответы на заглушку.
Пример:
RestTemplate restTemplate = new RestTemplate();
MockRestServiceServer mockServer = MockRestServiceServer.createServer(restTemplate);
mockServer.expect(requestTo("/greeting"))
.andRespond(withSuccess("Hello world", "text/plain"));
// use RestTemplate ...
mockServer.verify();
также читайте этот пример