2016-10-16 5 views
2

Я пытаюсь проверить мой отдых api с mockMvc.Почему MockMvc всегда возвращает пустой контент()?

mockMvc.perform(get("https://stackoverflow.com/users/1/mobile") 
     .accept(MediaType.APPLICATION_JSON)) 
     .andExpect(status().isOk()) 
     .andDo(print()) 
     .andExpect(content().string("iPhone")) 

Испытание не удалось из-за:

java.lang.AssertionError: Response content 
Expected :iPhone 
Actual : 

С выходом print(), я знаю, что API на самом деле вернулся ожидаемой строка "iPhone".

ModelAndView: 
     View name = users/1/mobile 
      View = null 
     Attribute = treeNode 
      value = "iPhone" 
      errors = [] 

И я думаю, пустой "Actual" выше вызывается пустой "Body" ниже

MockHttpServletResponse: 
      Status = 200 
    Error message = null 
      Headers = {} 
    Content type = null 
      Body = 
    Forwarded URL = users/1/mobile 
    Redirected URL = null 
      Cookies = [] 

Мои вопросы:

  1. Почему MockHttpServletResponse's Тело пусто;
  2. Как правильно проверить ответ API.
+1

Пожалуйста, добавьте контроллер вы тестирование (* Тема под тестированием *) –

ответ

1

Если ваш метод действия (метод с @RequestMapping аннотацию) возвращает экземпляр ModelAndView или вы работаете с Model вы должны проверить его с помощью MockMvcResultMatchers#model функции:

.andExpect(MockMvcResultMatchers.model().attribute("phone", "iPhone")) 
.andExpect(MockMvcResultMatchers.model().size(1)) 

MockMvcResultMatchers#contnet он подходит для методов REST действий (методы с аннотацией @RequestBody).


Чтобы иметь лучшее представление о тестировании Spring MVC и Spring REST контроллеров проверить эту связь:

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