【问题标题】:Cannot create Dynamic Scenario Outline via Java call无法通过 Java 调用创建动态场景大纲
【发布时间】:2019-05-31 08:36:06
【问题描述】:

无法在空手道中通过 Java 调用创建动态场景大纲。

例如,我可以使用“硬编码”Json 数组创建动态场景大纲:

* def foobar = [{ 'type': 'app' }]

但是当我尝试从 Java 类生成相同的 Json 数组时,我总是收到以下空手道警告,并且动态场景大纲永远不会执行:

警告 com.intuit.karate - 忽略动态表达式,未评估为列表

-- 或者--

警告 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 但也没有运气。

我觉得我遗漏了一些明显的东西,但我现在无法透过树木看到森林......

【问题讨论】:

    标签: karate


    【解决方案1】:

    我尝试从 Java 类生成相同的 Json 数组,

    从 Java 代码返回的应该是 List&lt;Map&lt;String, Object&gt;&gt;,它应该可以正常工作。你试过List&lt;String&gt;,这就是问题所在。

    阅读文档的这一部分:https://github.com/intuit/karate#type-conversion

    另一个提示,您可以尝试“强制转换”以确保它是您需要的 JSON 数组形式,所以如果您懒得形成正确嵌套的 Map-s,只需从 Java 返回一个原始 JSON 字符串,下面的行将正确转换它。

    * json foobar = foobar
    

    【讨论】:

    • 谢谢彼得。我不太懒得形成正确嵌套的 List>,我只是没有建立连接。几个问题:1)我可以返回一个 Java JSONArray 还是只返回一个 List> 构造? 2) 对于“惰性”转换,我会先调用我的 Java 并分配给“foobar”,然后再使用 json 关键字重新分配“foobar”吗?
    • @kpschmidt 抱歉并不是那个意思——我的意思是你可以使用原始的 json 字符串。建议避免 Jsonarray 坚持 Java 基础
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-09-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-07-11
    相关资源
    最近更新 更多