Я хочу выполнить настраиваемые утверждения для полей в JSON, загруженных из файла.
Я понимаю, что у нас есть нечеткое сопоставление, но я хотел бы выполнить что-то более настраиваемое, например, иметь функцию, которая анализирует дату как LocalDateTime:
public class DateUtil {
public static boolean matchesMyDateFormat(String dateStr) {
try {
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd'T'HH:mm:ss.SSS'Z'");
LocalDateTime.parse(dateStr, formatter);
} catch (DateTimeParseException e) {
return false;
}
return true;
}
}
Это будет вызываться следующим образом:
* def matchesMyDateFormat =
"""
function fn(dateX){
return Java.type('com.karate.DateUtil').matchesMyDateFormat(dateX);
}
"""
* def expected = read('expected.json')
* def actual = read('actual.json')
* match expected == actual
Где и ожидалось. json выглядит так:
{
"date1" : "#? matchesMyDateFormat(_)"
}
NB, это специально для JSON, загруженного из файла, а не JSON, который указан в самом файле функции (например, как для isValidTime () здесь: https://github.com/intuit/karate/blob/master/karate-junit4/src/test/java/com/intuit/karate/junit4/demos/schema-like.feature).
Несколько причин для желания сделать это таким образом:
- Некоторые полезные данные, которые мне нужно утверждать, имеют много полей даты, возвращающихся в разных форматах. Утверждение, подобное приведенному выше, отлично согласуется с ie отличным способом проверки схемы Karate. Однако выполнение этого в файлах функций потребует большого количества кода, то есть строки кода для каждой даты (я понимаю, что соответствует каждому , может быть использовано - но даже это будет сложным, в зависимости от вложенности полей.)
- Я мог бы добавить эту функцию в свой общий файл функций utils, чтобы ее можно было повторно использовать во всей схеме ожидаемого ответа проекта.
- Помимо этого I ' я хотел бы заняться другими делами, например, проверить, что одна дата наступает раньше другой (но я бы хотел сделать это, используя различные типы в Java, например, принимая во внимание часовой пояс).
- Я бы также ищите метод сопоставления формата для другого параметра, который позволяет тестеру указать строку настраиваемого формата.
NB: я прочитал документы и другие ответы SO, связанные с датой Утверждения и считаю, что это немного другой вопрос.