空手道 Java 字符串插值
Karate Java String interpolation
我正在尝试调用一个 java 方法,该方法接受一个字符串作为空手道脚本中的参数,并在该字符串中插入一个在空手道中定义的值。
在我的例子中,它是一个简单的数据库 INSERT 语句,例如:
INSERT INTO A(id, time, value) VALUES(1, '2099-05-10 18:20:18.674 UTC', 'test')
脚本本身如下所示:
Background:
* def db = Java.type('com.example.DbTestHelper')
* def offsetDateTime = Java.type('java.time.OffsetDateTime')
* def zoneId = Java.type('java.time.ZoneId')
Scenario: testScenario
* def t = offsetDateTime.now(zoneId.of("Europe/Berlin")).plusDays(1)
* def row = db.insertRow("INSERT INTO A(id, time, value) VALUES(123, #t, 'test')")
而 insertRow 方法如下所示:
@JvmStatic
fun insertRow(vararg strings: String) {
jdbc.batchUpdate(*strings)
}
我尝试了多种设置值 t 的组合,例如 #(t)、#t、"#(t)" 等。不幸的是,其中 none甚至在 java 方法被调用之前就导致了各种 java 脚本解析错误。
实现该目标的正确方法是什么?有可能吗?
首先阅读:https://github.com/karatelabs/karate#rules-for-embedded-expressions
好消息是,从 1.0 开始,空手道支持反引号内的 ES6 JS 字符串插值:
* def foo = 1
* def txt = `hello ${foo}`
* match txt == 'hello 1'
当然,字符串连接总是有效的。您只需要考虑大多数空手道语法,尤其是当您调用 Java 时 - 只不过是普通的旧 JavaScript.
* db.insertRow("INSERT INTO A(id, time, value) VALUES(123, " + t + ", 'test')")
我想你现在可以继续了。
我正在尝试调用一个 java 方法,该方法接受一个字符串作为空手道脚本中的参数,并在该字符串中插入一个在空手道中定义的值。
在我的例子中,它是一个简单的数据库 INSERT 语句,例如:
INSERT INTO A(id, time, value) VALUES(1, '2099-05-10 18:20:18.674 UTC', 'test')
脚本本身如下所示:
Background:
* def db = Java.type('com.example.DbTestHelper')
* def offsetDateTime = Java.type('java.time.OffsetDateTime')
* def zoneId = Java.type('java.time.ZoneId')
Scenario: testScenario
* def t = offsetDateTime.now(zoneId.of("Europe/Berlin")).plusDays(1)
* def row = db.insertRow("INSERT INTO A(id, time, value) VALUES(123, #t, 'test')")
而 insertRow 方法如下所示:
@JvmStatic
fun insertRow(vararg strings: String) {
jdbc.batchUpdate(*strings)
}
我尝试了多种设置值 t 的组合,例如 #(t)、#t、"#(t)" 等。不幸的是,其中 none甚至在 java 方法被调用之前就导致了各种 java 脚本解析错误。
实现该目标的正确方法是什么?有可能吗?
首先阅读:https://github.com/karatelabs/karate#rules-for-embedded-expressions
好消息是,从 1.0 开始,空手道支持反引号内的 ES6 JS 字符串插值:
* def foo = 1
* def txt = `hello ${foo}`
* match txt == 'hello 1'
当然,字符串连接总是有效的。您只需要考虑大多数空手道语法,尤其是当您调用 Java 时 - 只不过是普通的旧 JavaScript.
* db.insertRow("INSERT INTO A(id, time, value) VALUES(123, " + t + ", 'test')")
我想你现在可以继续了。