【问题标题】:How do I pass numbers to Java from karate? How do I call a Java constructor that takes a number?如何从空手道将数字传递给 Java?如何调用带有数字的 Java 构造函数?
【发布时间】:2020-11-23 02:10:14
【问题描述】:

我只是想弄清楚 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 TypeError:无法使用带有传递参数的构造函数Utils创建新对象;它们与它的任何方法签名都不匹配。

我曾希望将 JavaScript 数字转换为双精度数? main 函数和 exec 函数工作。两者都是静态的。我可以取回一个数字,但无法将一个数字从 karate/js 传递给 Java。

提前感谢您的帮助。

【问题讨论】:

  • 顺便说一句,我第一次尝试使用整数,但后来我认为 JavaScript 只有一个数字,所以我在 Java 代码中将类型更改为 double。场景中仍有一些地方引用了整数。应该没关系。

标签: java testing interop karate


【解决方案1】:

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

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

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

【讨论】:

  • 嗨,我不知道 Java 有 Number 类型。我来自 C、C++(以及 Delphi、C#)。 Java 的大部分内容都非常简单,除了那些差异 :-) 我希望升级不会破坏任何东西。我会看看。非常感谢您的回复。
  • 数字抽象类的作用就像一个魅力。 @Peter Thomas我不知道您在哪里找到时间用较新版本更新产品,并且最重要的是支持许多用户。所有这些都是免费的。非常感谢产品和支持。
猜你喜欢
  • 2011-11-27
  • 1970-01-01
  • 2022-01-12
  • 1970-01-01
  • 2014-09-10
  • 1970-01-01
  • 2012-03-14
  • 1970-01-01
  • 2023-03-26
相关资源
最近更新 更多