Я тестирую get
метод моего контроллера SpringBoot, который предоставляет объекты, записанные в базе в определенном временном диапазоне.
Я понимаю, что могу получить json после выполнения mockMvc и проанализировать его с объектомmapper, используйте несколько потоков и один assert, но мне интересно, есть ли встроенный способ сделать это с последовательностью andExpect ().
Я пробовал Hamcrest Date Matchers, но он не может анализировать формат LocalDateTime
java.lang.AssertionError: JSON path "data.SENT[0].sentAt"
Expected: the date is within 10 days of "08 апр 2019 19:03:48 614ms +0300"
but: was "2019-04-02T11:36:16.51"
this.mockMvc.perform(get(BASE_URL)
.accept(MediaType.APPLICATION_JSON_VALUE)
.contentType(MediaType.APPLICATION_JSON)
.content(jsonMockObjectMapper.writeValueAsString(smsStatisticFullRequest)))
.andExpect(status().isOk())
.andExpect(jsonPath("data.SENT[*].sentAt", Matchers.hasItems("2019-04-02T11:36:16.51")))
// .andExpect(jsonPath("data.SENT[0].sentAt", DateMatchers.within(10, TimeUnit.DAYS, Timestamp.valueOf(LocalDateTime.now()))))
// .andExpect(jsonPath("data.SENT[0].sentAt", DateMatchers.before(Timestamp.valueOf(LocalDateTime.now()))))
.andDo(CustomResultHandler.handleResult(name.getMethodName(), MockMvcRestDocumentation::document));
Я ожидаю, что смогу проверить все объекты в возвращаемых данных, чтобы быть в диапазоне времени утверждения.
Content-Type: application/json;charset=UTF-8
Cache-Control: no-cache, no-store, max-age=0, must-revalidate
{
"apiVersion" : "1.0.1",
"error" : false,
"data" : {
"SENT" : [ {
"id" : 3,
"phone" : "9111233456",
"userId" : 683581,
"sentAt" : "2019-04-02T11:36:16.51",
"operation" : "RECOVERY_PASSWORD",
"smsCode" : "2112"
} ],
Я могу проверить, есть ли какой-то конкретный объект,Но я не уверен, что в моих возвращаемых данных нет записей за период времени.