如何将数字从空手道传递到java?如何调用接受数字的java构造函数?

alen0pnh  于 2021-07-08  发布在  Java
关注(0)|答案(1)|浏览(338)

我只是想弄清楚java interop在空手道中是如何工作的,下面是一些示例:https://www.swtestacademy.com/java-code-in-karate-api-tests/
我的java类是:

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

i get:javascript函数调用失败::3 typeerror:无法使用传递参数的构造函数utils创建新对象;它们与它的任何方法签名都不匹配。
我曾希望javascript数字能转换成double?主要功能和执行功能工作。两者都是静态的。我可以找回一个数字,但是在将一个数字从karate/js传递到java时失败了。
提前谢谢你的帮助。

hfsqlsce

hfsqlsce1#

是的,js引擎有一些怪癖。我们正在为未来版本开发一个新版本:https://github.com/intuit/karate/wiki/1.0-upgrade-guide
我刚刚为新引擎写了一些测试:https://github.com/intuit/karate/commit/74ad0f2786730fd912f6bf2b15ebdf426e026206
所以我的建议是使用 Number 作为参数类型,这应该适用于所有情况。如果你能在开发过程中测试新版本,并就你看到的任何问题提供反馈/提示,那就更好了。

相关问题