如何从空手道将数字传递给 Java?如何调用带数字的 Java 构造函数?

How do I pass numbers to Java from karate? How do I call a Java constructor that takes a number?

我只是想弄清楚 Java 互操作在空手道中是如何工作的,并查看了如下示例: https://www.swtestacademy.com/java-code-in-karate-api-tests/

我的javaclass是这样的:

    import java.io.*;
    import java.lang.Process;
    public class Utils {
        double m_x;
    
        public Utils(double x) {
            m_x = x;
        }
    
        public static void main(String[] args) {
            System.out.println("Hello World");
        }
    
        public static int exec(String command) throws InterruptedException, IOException {
            Runtime run = Runtime.getRuntime();
            Process proc = run.exec(new String[]{"/bin/bash", "-c", command});
            proc.waitFor();
            return proc.exitValue();
        }
    
        public double nonStatic() {
            return m_x;
        }
    
        public double nonStatic1(double i) {
            return i+1;
        }
    }

我可以调用静态方法,但不能调用构造函数或非静态方法。 顺便说一句,我知道 Java 可以处理函数重载,但我不确定 JavaScript,所以这就是我使用不同函数名称的原因。

我调用非静态函数的尝试之一是这样的:

Scenario: nonStatic
* def nonStat =
"""
function() {
     var Utils = Java.type('Utils');
     var obj = new Utils(7.0);
     return obj.nonStatic();
}
"""
* def result = call nonStat
* print 'result', result

Scenario: nonStatic(int i)
* def nonStat1 =
"""
function(i) {
     var Utils = Java.type('Utils');
     var obj = new Utils(7.0)
     return obj.nonStatic1(i);
}
"""
* def result = call nonStat1 15
* print 'result1', result

我得到: java脚本函数调用失败::3 TypeError: 无法使用带有传递参数的构造函数 Utils 创建新对象;它们不匹配它的任何方法签名。

我曾希望 Java脚本编号可以转换为双精度? 主要功能和执行功能工作。两者都是静态的。我可以取回一个数字,但无法将数字从 karate/js 传递到 Java。

在此先感谢您的帮助。

是的,JS 引擎中有一些怪癖。我们正在为未来的版本迁移到一个新版本:https://github.com/intuit/karate/wiki/1.0-upgrade-guide

我刚刚为新引擎写了一些测试:https://github.com/intuit/karate/commit/74ad0f2786730fd912f6bf2b15ebdf426e026206

所以我的建议是使用 Number 作为参数类型,这应该适用于所有情况。如果您能测试开发中的新版本并就您看到的任何问题提供反馈/提醒,那就太好了。