spring-boot test: запрос @get возвращается с пустым телом

при тестировании согласования содержимого макет GET возвращает значение null в теле ответа, хотя статус ответа равен 200.

java.lang.AssertionError: Response header 'Content-Type' 
Expected :application/json;charset=UTF-8
Actual   :null

вот полный код тестового класса. Я хочу убедиться, что тип контента json.

@RunWith(SpringRunner.class)
@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.MOCK)
@AutoConfigureMockMvc
public class ControllerTest {

    @Autowired
    private MockMvc mockMvc;

    @MockBean
    Controller controller;

    @Test
    public void test() throws Exception {
        mockMvc.perform(get("/query?mediaType=json"))
                .andExpect(status().isOk())
                .andExpect(header().string(HttpHeaders.CONTENT_TYPE, MediaType.APPLICATION_JSON_UTF8_VALUE));
    }}

вот конечная точка моего контроллера.

    @RestController
    public class Controller {

        @RequestMapping(value = "/query", produces = {"application/json", "application/xml"}, method = RequestMethod.GET)
        public @ResponseBody ResultSet getResults(
                final HttpServletRequest request
        ) throws Throwable {

       // logic  ...
       SearchService search = (SearchService) context.getBean("search");
       ResultSet result = search.getResults();
       return result;
    }

Есть мысли, почему Body вернется как null?


person Alex    schedule 29.07.2019    source источник


Ответы (1)


Проблема связана с вашим определением контроллера в вашем тестовом классе. Поскольку вы тестируете свой Controller, вы должны использовать его реальный экземпляр. Получите экземпляр mockMvc для этого Controller, как показано ниже (вы можете сделать это в аннотированном методе установки @Before):

mockMvc = MockMvcBuilders.standaloneSetup(new Controller()).build();
person Debojit Saikia    schedule 29.07.2019
comment
для этого я получаю исключение: java.lang.AssertionError: Content type not set - person Alex; 29.07.2019
comment
Изменил мой ответ. Пожалуйста, проверьте сейчас. - person Debojit Saikia; 29.07.2019
comment
Хорошо, это потребовало от меня внедрения нескольких фиктивных объектов, которые у меня есть в классе контроллера, но в конечном итоге это сработало. Я заметил, что у @InjectMocks Controller controller был тот же результат. - person Alex; 29.07.2019