【发布时间】:2020-11-04 02:12:08
【问题描述】:
我希望对从文件加载的 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
expected.json 看起来像这样:
{
"date1" : "#? matchesMyDateFormat(_)"
}
注意,这专门用于从文件加载的 JSON,而不是在功能文件本身中指定的 JSON(例如,这里的 isValidTime():https://github.com/intuit/karate/blob/master/karate-junit4/src/test/java/com/intuit/karate/junit4/demos/schema-like.feature)。
希望这样做的几个原因:
- 我需要断言的一些有效负载有很多日期字段返回,格式不同。像上面这样断言将与空手道验证模式的出色方式很好地结合在一起。然而,在功能文件中执行此操作需要大量代码,即每个日期的一行代码(我意识到可以使用 match each - 但即使这样也会变得复杂,具体取决于字段的嵌套。)
- 我可以将此函数添加到我的常用 utils 功能文件中,以便在整个项目的预期响应架构中重复使用。
- 除此之外,我还想做其他事情,例如检查一个日期是否先于另一个日期(但我想使用 Java 中的各种类型来执行此操作,例如考虑时区)。
- 我还在寻找格式匹配方法来接收另一个参数,它可以让测试人员指定自定义格式字符串。
注意:我已通读文档和其他与日期断言相关的 SO 答案,并认为这是一个略有不同的问题。
目前可以在空手道中进行上述操作吗?
【问题讨论】:
标签: karate