[英]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/
我的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
我得到:javascript 函數調用失敗::3 類型錯誤:無法使用帶有傳遞參數的構造函數 Utils 創建新對象; 它們不匹配其任何方法簽名。
我曾希望將 JavaScript 數字轉換為雙精度數? main 函數和 exec 函數工作。 兩者都是靜態的。 我可以取回一個數字,但無法將數字從 karate/js 傳遞給 Java。
在此先感謝您的幫助。
是的,JS 引擎中有一些怪癖。 我們正在為未來版本遷移到一個新版本: https : //github.com/intuit/karate/wiki/1.0-upgrade-guide
我剛剛為新引擎寫了一些測試: https : //github.com/intuit/karate/commit/74ad0f2786730fd912f6bf2b15ebdf426e026206
所以我的建議是使用Number
作為參數類型,這應該適用於所有情況。 如果您可以在開發中測試新版本並針對您看到的任何問題提供反饋/提醒,那就太好了。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.