Я сохраняю ожидаемую строку json в файле json в ресурсах, как показано ниже. Строка json состоит из регулярного выражения. Я использую JSONAssert Library для сравнения двух строк json.
{
"timestamp": "^\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}.\\d{3}+\\d{4}$",
"status": 415,
"error": "Unsupported Media Type",
"message": "Content type 'text/plain;charset=ISO-8859-1' not supported",
"path": "/service/addUser"
}
Мой фактический ответ состоит из отметки времени в этом формате 2018-11-13T04:10:11.233+0000
JSONAssert.assertEquals(getJsonBody(expected), response.asString(),false);
Всегда выдает ошибку ниже в регулярном выражении
java.lang.AssertionError: timestamp
Expected: ^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}.\d{3}+\d{4}$
got: 2018-11-13T04:12:55.923+0000
Любые рекомендации по этой ошибке?
Ваше регулярное выражение неверно - точка и плюс имеют особое значение и должны быть экранированы. Попробуйте ^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}\.\d{3}\+\d{4}$
Я сбежал, но это не работает. Та же ошибка
Я добавил это регулярное выражение [0-9]{4}-[0-9]{2}-[0-9]{2}T[0-9]{2}:[0-9]{2}:[0-9]{2}\\.[0-9]{3}\\+[0-9]{4}, но не сработало
@Kartik У меня есть исключение для сопоставления шаблонов. Позволь мне исправить это
@vkrams ах, извините, я неправильно понял ваш вопрос, позвольте мне обновить свой ответ
@kartik, твой ответ работает. Спасибо :-)




Вы сравниваете шаблон со строкой отметки времени. Что вам на самом деле нужно сделать, так это проверить, соответствует ли временная метка Спички шаблону.
Попробуйте этот код: -
String expected = "{\n" +
" \"timestamp\": \"^\\\\d{4}-\\\\d{2}-\\\\d{2}T\\\\d{2}:\\\\d{2}:\\\\d{2}\\\\.\\\\d{3}\\\\+\\\\d{4}$\",\n" +
" \"status\": 415,\n" +
" \"error\": \"Unsupported Media Type\",\n" +
" \"message\": \"Content type 'text/plain;charset=ISO-8859-1' not supported\",\n" +
" \"path\": \"/service/addUser\"\n" +
"}";
String actual = "{\n" +
" \"timestamp\": \"2018-11-13T04:12:55.923+0000\",\n" +
" \"status\": 415,\n" +
" \"error\": \"Unsupported Media Type\",\n" +
" \"message\": \"Content type 'text/plain;charset=ISO-8859-1' not supported\",\n" +
" \"path\": \"/service/addUser\"\n" +
"}";
JSONAssert.assertEquals(
expected,
actual,
new CustomComparator(
JSONCompareMode.LENIENT,
new Customization("***", new RegularExpressionValueMatcher<>())
)
);
Итак, с вашим кодом это будет выглядеть примерно так: -
JSONAssert.assertEquals(
getJsonBody(expected),
response.asString(),
new CustomComparator(
JSONCompareMode.LENIENT,
new Customization("***", new RegularExpressionValueMatcher<>())
)
);
вместо сравнения значений вы должны сделать что-то вроде
assertTrue(response.asString().matches(expected))