单元测试grails ConfigSlurper行为

时间:2015-12-10 23:25:53

标签: grails grails-config

我想编写测试来测试外化配置的行为,并声明设置的内容是我所期望的。这是针对具体情况的:

Config.groovy中:

a.reused.value =' orig' my.variable =' $ {a.reused.value}'

外化groovy文件:

a.reused.value =' new_value'

我希望a.reused.value和my.variable都是' new_value'。

现在,我想我可以在表示这些配置文件的字符串中读取单元测试(例如,我为其他单元测试执行类似的操作以填充Holders.grailsApplication.config),可能使用合并?

但我无法弄清楚如何获得Grails在应用程序运行时实际获得的值。相反,我得到" $ {a.reused.value}"在我的单元测试中。

有没有办法模仿Grails实际解决此值的行为?我在Grails 2.4.4源代码中进行了一些挖掘(这是我们正在使用的)并且没有任何运气来计算这一部分。我也尝试过Eval.me(),但这似乎也不是正确的。

1 个答案:

答案 0 :(得分:0)

设置my.variable时,您没有使用GString对象,导致表达式被视为值本身。使用双引号自动解析表达式。

a.reused.value = 'orig' my.variable = "${a.reused.value}"

更新1:

您想要做的是直接无法做到的。您正在为表达式中的变量赋值。在第一次评估配置对象期间,my.variable已经分配了一个值,现在它不再包含表达式。所以你有两个选择:1)也可以在外部配置中重新分配第二个变量,或者2)使用闭包将值赋给第二个变量。

my.variable = { -> "$a.reused.value" }

并在访问时执行:grailsApplication.config.my.variable.call() 但同样,在您的代码中,您必须确保此变量包含闭包而不是值本身。