java - 在 Karate 中,将 Java 函数包装在 JavaScript 函数中有什么好处?

标签 java testing interop karate java-interop

我可以像这样包装一个 Java 函数:

* def myJavaMethod =
"""
function() {
     var Utils = Java.type('Utils');
     // use Number type in constructor
     var obj = new Utils(...);
     return obj.myJavaMethod();
}
"""

但我为什么要这么做?我可以在测试场景中直接使用 Java 函数,如下所示:

Scenario: Test exec and error value
* def Utils = Java.type('Utils');
* def ret = Utils.exec('echo "From Java" > /home/richard//karate-test/karate-0.9.6/out.txt');
* match read('out.txt') == "From Java\n";
* match Utils.exec('exit 123') == 123

注意:exec 是一个静态方法,它使用 shell 来执行给定的命令。

至少我针对 static 方法测试了它,并且在没有 JavaScript 迂回的情况下工作正常。 JavaScript 包装器似乎只增加了一层额外的复杂性。 除此之外,使用“调用”语法我只能传递一个参数(当然可以是整个对象或数组)。 但是,我可以将参数直接传递给 Java 函数(使用普通语法),甚至可以在匹配中使用结果。 (我假设参数和结果被隐式转换为 JavaScript 值,它可以是 JSON 对象或数组)。

到目前为止,我还没有看到将 Java 代码显式包装在 JavaScript 包装器中的优势。我认为问题出在我身上,即:我在这里遗漏了一些重要的点?

最佳答案

唯一的好处是减少打字和当你有很多代码重用的时候。例如,而不是:

* def foo = java.util.UUID.randomUUID() + ''

你定义一次:

* def uuid = function(){ return java.util.UUID.randomUUID() + '' }

然后随便调用, super 简洁:

* def json = { foo: '#(uuid())' }

关于java - 在 Karate 中,将 Java 函数包装在 JavaScript 函数中有什么好处?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65025311/

相关文章:

java - 使用正则表达式替换字符

interop - 在 C# 中使用 ActiveX PropertyBags

java - 将 Frege 列表转换为 Java 数组

Angular 4 Jasmine Actual 不是函数

c++ - 验证输出到 "Find the numbers between 1 and 1000 whose prime factors' 总和本身就是一个素数”来自 Allain 的 Jumping into C++ (ch7 #3)

laravel - 运行测试时功能未触发

Git 作为 mercurial 客户端?为什么没有 git-hg?

java - 在 spring 上下文初始化开始之前执行一段 java 代码

java - 服务类委派

java - RDF4J:解析来自端点的查询结果并将其存储为 ntriples 文件(格式错误的查询)