[英]Groovy interpolate multiline string in java annotation
是否可以在具有常量的@Sql注释的地方编译groovy代码?
下面的代码是用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
}
当我想运行测试方法时,编译时出错:
Groovyc:期望将'INSERT INTO pracownik($ Fields.KOMPETENCJA_ID,nr_ewid)值(1,'A'); 插入typ_zadania(id,kod)值(1,'KOD'); 成为@ org.springframework.test.context.jdbc.Sql中的java.lang.String类型的内联常量
我认为带有美元符号的多行字符串被评估为GString对象,但是语句字段是字符串数组的类型。
我可以在多行字符串中使用带有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
}
关于Groovy的一个有趣事实。 通常使用双引号
"
来表示GString
类型。但是,Groovy编译器会检查字符串是否包含${variableName}
类的任何变量来进行插值。如果找到任何${variableName}
,它将使用GString
作为类型,否则使用String
。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.