Проблема в записи и сравнении Json
@Test
void getAll() throws Exception {
MvcResult result = AbstractControllerTest.mockMvc
.perform(MockMvcRequestBuilders.get(REST_URL).accept(MediaType.APPLICATION_JSON_VALUE)).andReturn();
assertEquals(result.getResponse().getStatus(), 200);
String restaurantsJson = result.getResponse().getContentAsString();
assertEquals(restaurantsJson, objectToJson(RESTAURANTS_ARRAY));
}
Expected :[{"id":100000,"name":"first restaurant","description":"fi re desc","meals":[{"name":"meal 1 re 1","id":100002,"price":100},{"name":"meal 2 re 1","id":100003,"price":200}]},{"id":100001,"name":"sec restaurant","description":"se re desc","meals":[{"name":"meal 1 re 2","id":100004,"price":300},{"name":"meal 2 re 2","id":100005,"price":400}]}]
Actual :[{"name":"first restaurant","id":100000,"description":"fi re desc","meals":[{"name":"meal 1 re 1","id":100002,"price":100},{"name":"meal 2 re 1","id":100003,"price":200}]},{"name":"sec restaurant","id":100001,"description":"se re desc","meals":[{"name":"meal 1 re 2","id":100004,"price":300},{"name":"meal 2 re 2","id":100005,"price":400}]}]
Имеется тест, сравнивающий два джейсона, первый достается из MvcResult, а второй получается при записи массива через ObjectMapper. Записываемый объект имеет супер класс с параметром name, и по какой-то причине в первом случае на первое место в json ставится параметр id, а вот втором name.
Ответы (1 шт):
Автор решения: Sergei Kirjanov
→ Ссылка
Такие объекты, как Map не гарантируют порядок обхода ключей.
Соответственно при сериализации в json сериализатор может (или):
- просто обойти ключи в неопределенном порядке -- так быстрей
- отсортировать ключи предварительно, чтоб всегда получался одинаковый json
- предоставить возможность настроить одно из предидущих
Соответственно бы можете (или):
- понять, что четкий порядок у ключей есть и поменять тестовую строку
- настроить сериализатор
- заменить сериализатор
Подгонять строку под неизвестно что не советую, слетит в самый неподходящий момент.