繁体   English   中英

Groovy在Java注释中插值多行字符串

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM