簡體   English   中英

在空手道中,將 Java function 包裝在 JavaScript ZC1C5145268C40C1C1C5145268C40A 中的優勢是什么?

[英]In Karate, what is the advantage of wrapping a Java function in a JavaScript function?

我可以像這樣包裝 Java function :

* 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是一個 static 方法,它使用 shell 來執行給定的命令。

至少我對static方法進行了測試,並且在沒有 JavaScript 繞道的情況下工作正常。 似乎 JavaScript 包裝器只會增加額外的復雜性。 除此之外,使用“調用”語法,我只能傳遞一個參數(不可否認,它可以是整個 object 或數組)。 但是,我可以將參數直接傳遞給 Java function (使用正常語法),甚至在匹配中使用結果。 (我假設參數和結果被隱式轉換為 JavaScript 值,這可能是 JSON object 或數組)。

到目前為止,我還沒有看到在 JavaScript 包裝器中顯式包裝 Java 代碼的優勢。 我認為問題出在我身上,那就是:我在這里遺漏了一些重要的點?

唯一的好處是減少打字和當你有很多代碼重用時。 例如,而不是:

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

你定義一次:

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

然后在任何地方調用它,它非常簡潔:

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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