簡體   English   中英

如何將數字從空手道傳遞給 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/

我的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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM