在空手道中,用javascript函数 Package java函数有什么好处?

yqyhoc1h  于 2021-07-06  发布在  Java
关注(0)|答案(1)|浏览(684)

我可以这样 Package 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执行给定的命令。
至少我对静态方法进行了测试,没有javascript绕道,效果很好。javascript Package 器似乎只增加了一层额外的复杂性。除此之外,使用“call”语法,我只能传递一个参数(当然可以是整个对象或数组)。但是,我可以直接将参数传递给java函数(使用普通语法),甚至可以在匹配中使用结果(我假设参数和结果被隐式转换为javascript值(可以是json对象或数组)。
到目前为止,我还没有看到在javascript Package 器中显式 Package java代码的优势。我想问题出在我身上,那就是:我遗漏了一些重要的一点?

zz2j4svz

zz2j4svz1#

唯一的优点是减少了输入,并且当您有大量代码可重用时。例如,而不是:


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

您只需定义一次:


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

然后在任何地方称呼它,它非常简洁:


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

相关问题