无法通过Java调用创建动态方案大纲

时间:2019-05-30 21:45:13

标签: karate

无法通过空手道中的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,但也没有运气。

我觉得我遗漏了一些明显的东西,但是现在我看不到穿过树林的森林...

1 个答案:

答案 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