无法在空手道中通过Java调用创建动态脚本大纲。
我可以用“硬编码”Json Array创建一个动态脚本大纲,例如:
* def foobar = [{ 'type': 'app' }]
但是,当我尝试从Java类生成相同的Json Array时,我总是得到以下空手道警告,并且动态脚本大纲永远不会执行:
WARN com.intuit.karate -忽略动态表达式,未计算到列表
-或者--
WARN com.intuit.karate -忽略动态表达式列表项0,而不是类似映射
我尝试使用空手道关键字'def','string','json‘作为var类型,但没有成功。我甚至尝试过在Java方法中硬编码上面所示的相同字符串,但没有成功。
我在“Background:”中声明/调用我的Java类,并打印返回的内容,它“看起来”是正确的。
Background:
* def IdaDataApiUtil = Java.type('data.IdaDataApiUtil')
* def foobar = IdaDataApiUtil.getClientExample('ida-sp')
* print foobar
然后,我尝试在“示例”中使用JsonArray :如下所示:
Examples:
| foobar |
此时,根据我尝试返回的内容(JsonArray、JsonObject、Map、List),我得到了上面提到的错误。
如果我简单地使用硬编码的'def':
* def foobar = [{ 'type': 'app' }]
它的工作方式与预期一致。
在我的Java代码中,我尝试了各种方法:
硬编码的Json字符串:
public static String getClientExample() {
return "[{ 'type': 'app' }]";
}
列表:
public static List<String> getClientExample() {
List<String> list = new ArrayList<>();
list.add("'type': 'app'");
return list
}
映射:
public static Map<String, Object> getClientExample() {
Map<String, Object> map = new HashMap<>();
map.put("type", "app");
return map;
}
我在两个列表/map中都尝试过键/值的变体,但没有成功。我也尝试过JSONObject/JSONArray,但也没有成功。
我感觉我错过了一些显而易见的东西,但我现在看不到穿过树木的森林……
发布于 2019-05-31 08:36:07
我尝试从
类生成相同的Json数组,
您从Java代码返回的应该是一个List<Map<String, Object>>
,而且它应该可以正常工作。您已经尝试过List<String>
,这就是问题所在。
阅读文档的这一部分:https://github.com/intuit/karate#type-conversion
另一个技巧是,您可以尝试“强制转换”以确保它是在所需的JSON数组形式中,所以如果您太懒惰而不能形成正确的嵌套Map
-s,那么只需从Java返回一个原始的JSON字符串,下面的代码行将正确地转换它。
* json foobar = foobar
https://stackoverflow.com/questions/56386014
复制相似问题