首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >无法通过Java调用创建动态脚本大纲

无法通过Java调用创建动态脚本大纲
EN

Stack Overflow用户
提问于 2019-05-31 05:45:13
回答 1查看 385关注 0票数 2

无法在空手道中通过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,但也没有成功。

我感觉我错过了一些显而易见的东西,但我现在看不到穿过树木的森林……

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 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
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56386014

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档