我想编写测试来测试外化配置的行为,并声明设置的内容是我所期望的。这是针对具体情况的:
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(),但这似乎也不是正确的。
答案 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()
但同样,在您的代码中,您必须确保此变量包含闭包而不是值本身。