K2m*_*J33 2 java groovy jvm compiler-errors spock
是否可以编译带有常量 @Sql 注释的常规代码?
下面的代码是简单的测试,用 Spock 编写。
@Sql(statements = ["""
INSERT INTO pracownik ($Fields.KOMPETENCJA_ID, nr_ewid)
values (1, 'A');
INSERT INTO typ_zadania (id, kod) values (1, 'KOD');
"""]
)
def "should add new qualification"() {
//test code omitted
}
Run Code Online (Sandbox Code Playgroud)
当我想运行测试方法时,我在编译时收到错误:
Groovyc:预期 ' INSERT INTO pracownik ($Fields.KOMPETENCJA_ID, nr_ewid) 值 (1, 'A'); INSERT INTOtyp_zadania(id,kod)值(1,'KOD'); 成为 @org.springframework.test.context.jdbc.Sql 中 java.lang.String 类型的内联常量`
我认为带美元符号的多行字符串被评估为 GString 对象,但语句字段是字符串数组的类型。
我可以在groovy代码中使用多行字符串中的java注释常量吗?
您面临的问题与多行字符串无关 - 编译器期望传递给statement属性的值是内联常量。GString插值变量不能满足此期望。GString如果您编写包含来自类字段的内插值的单行,您将看到完全相同的编译错误Fields。
看来您的意图是获取与 关联的列名称Fields.KOMPETENCJA_ID。将其替换为期望值,因此不需要插值。像这样的东西:
@Sql(statements = """
INSERT INTO pracownik (kompetencja_id, nr_ewid)
values (1, 'A');
INSERT INTO typ_zadania (id, kod) values (1, 'KOD');
""")
def "should add new qualification"() {
//test code omitted
}
Run Code Online (Sandbox Code Playgroud)
关于 Groovy 的一个有趣的事实。双引号
"通常用来表示GString类型。然而,Groovy 编译器会检查字符串是否包含任何变量,例如${variableName}进行插值。如果找到,则将其用作GString类型,String否则使用。
| 归档时间: |
|
| 查看次数: |
945 次 |
| 最近记录: |