MockMvcResultMatchers - jsonPath () против содержимого () - PullRequest
0 голосов
/ 17 сентября 2018

Я тестирую контроллеры Spring REST, используя объект org.springframework.test.web.servlet.MockMvc.Я могу проверить ответ JSON, используя метод MockMvcResultMatchers.content() или MockMvcResultMatchers.jsonPath(), который принимает совпадение Hamcrest.Мне интересно, какой подход лучше и каковы лучшие практики?Со сложной структурой совпадения Hamcrest кажутся действительно сложными для чтения, а с content() длинный JSON должен быть выведен в отдельный файл (но это не так уж важно, IMHO).Стоит ли предпочесть один вариант другому или это совершенно личное дело?

Ответы [ 2 ]

0 голосов
/ 17 сентября 2018

Вы можете использовать content(), когда ваш ответ не является JSON.Т.е. если ответ простой текст.

jsonPath() дает больше возможностей для проверки ответа.Например,

  • вам нужно только проверить определенное поле;

  • вам нужно проверить массив json, но вы не заботитесь о порядке;

  • вы сравниваете для большего / меньшего, но не точного соответствия,

0 голосов
/ 17 сентября 2018

Это зависит от полезной нагрузки, которой вы манипулируете.

Если полезная нагрузка короткая String без движущихся значений (например, даты и т. Д.), Вы можете сравнить с незашифрованным текстом, может быть написано с использованием hjson для улучшения читабельности.

С другой стороны, если вам нужно тестировать сложные полезные данные, jsonPath - хороший способ облегчить тестовое чтение.

Во многих случаях утверждениетого, что полезная нагрузка соответствует вашей json-схеме, достаточно, поскольку ваши бизнес-правила тестируются в вашем доменном пакете, поэтому вам просто нужно проверить соответствие бизнес-объектов DTO.

В редких случаях большинствоваши тесты посвящены тестированию JSON контента, вы можете использовать специализированный инструмент сравнения, такой как JsonUnit , и хранить шаблоны полезной нагрузки в файлах.

В общем, есливы проводите модульное тестирование (как в случае тестирования на метод), единственное, что вы тестируете с использованием MockMvcResultMatchers#..., - это интеграция вашего кода с spring-mvc соглашениями.

...