为什么我的空手道功能中的 Java 函数返回的是字符串而不是数组?

Why is my Java function in my Karate feature returning a String instead of an array?

我不熟悉软件测试并且在空手道环境中工作。目前我正在研究一个故事,我必须测试最大数据库条目数是否正常工作——当达到最大条目数 (20) 时,程序 returns 一个 400 错误和一条消息已达到最大条目数。

当已经有 20 个条目时,我们在空手道中遇到的场景通过并且工作正常,但情况并非总是如此,因为不同的测试正在创建和删除条目,并且 运行.目前我设置了代码来计算最大化数据库所需的规则数 (maxTotalRules-ruleCount) 并将其解析为一个 int。然后我将它和一个随机字符串传递给 Java 方法。 java 方法然后使用 for 循环生成一个名称数组(abcd_1、abcd_2 等),无论数据库在其当前状态下需要多少名称,然后 return数组。

所以我在调用中定义了变量,然后记录结果变量以查看它是否包含应有的内容:

* def ruleNameArray = objUtility.createRuleNameArray(newRuleBase, maxDiffParse)
* karate.log(ruleNameArray)

我的问题是空手道中的数组通常打印如下:

[
  1,
  2
]

returned 数组打印如下:

Automation_Rule-botrrxyo_1 Automation_Rule-botrrxyo_2 Automation_Rule-botrrxyo_3

它在一行中打印所有内容,几乎就像是一个大字符串,而不是像数组一样输出。当我尝试使用该数组构建一个请求主体以传递给我的 API 以添加新的数据库条目时,我收到以下错误消息: "java.lang.RuntimeException: 不像地图或列表"

这可能是一个很长的解释,但本质上我的问题是为什么我的 Java 方法 return 没有被作为数组接收?我该如何解决这个问题?

如果 context/to 需要,请确保我的方法编写正确,这里是 Java 方法:

public String[] createRuleNameArray(String nameBase, int numOfNamesNeeded) {
        String[] ruleNameArray;
        ruleNameArray = new String[numOfNamesNeeded];

        for(int i=0; i < numOfNamesNeeded; i++) {
            ruleNameArray[i] = nameBase+(i+1);
            System.out.println(ruleNameArray[i]);
        }
        return ruleNameArray;
    }

我猜您使用的是 1.0.1 版本,该版本可能存在限制,其中 Java 字符串数组未正确转换为 JSON 数组。

应该立即起作用的解决方案是 - 请尝试从 Java createRuleNameArray() 函数返回 List<String> - 然后事情应该起作用。

如果您可以尝试空手道 1.1.0.RC5 并让我们知道它是否修复了上述限制,这也会非常有帮助。