我只是想弄清楚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时失败了。
提前谢谢你的帮助。
1条答案
按热度按时间hfsqlsce1#
是的,js引擎有一些怪癖。我们正在为未来版本开发一个新版本:https://github.com/intuit/karate/wiki/1.0-upgrade-guide
我刚刚为新引擎写了一些测试:https://github.com/intuit/karate/commit/74ad0f2786730fd912f6bf2b15ebdf426e026206
所以我的建议是使用
Number
作为参数类型,这应该适用于所有情况。如果你能在开发过程中测试新版本,并就你看到的任何问题提供反馈/提示,那就更好了。