无法通过空手道中的Java调用创建动态方案大纲。
例如,我可以使用“硬编码” Json数组创建动态方案大纲:
* def foobar = [{ 'type': 'app' }]
但是,当我尝试从Java类生成相同的Json数组时,总是收到以下空手道警告,并且动态方案大纲从不执行:
WARN com.intuit.karate-忽略动态表达式,未评估为列表
-或-
WARN com.intuit.karate-忽略动态表达式列表项0,而不是类似于地图
我尝试使用空手道关键字'def','string','json'作为var类型,但是没有运气。我什至尝试过用Java方法对上面显示的相同字符串进行硬编码,但是没有运气。
我在“背景:”中声明/调用我的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;
}
我在列表/地图中都玩过键/值的变体,但是没有运气。我也尝试过JSONObject / JSONArray,但也没有运气。
我觉得我遗漏了一些明显的东西,但是现在我看不到穿过树林的森林...
答案 0 :(得分:1)
我尝试从Java类生成相同的Json数组,
从Java代码返回的内容应该是List<Map<String, Object>>
,并且应该可以正常工作。您已经尝试过List<String>
,这就是问题所在。
阅读文档的这一部分:https://github.com/intuit/karate#type-conversion
另一个技巧是,您可以尝试“ cast”以确保它以所需的JSON数组形式出现,因此,如果您懒于形成正确嵌套的Map
-s,则只需从中返回原始JSON字符串即可Java,下面一行将正确转换它。
* json foobar = foobar