0

我想编写测试来测试外部化配置的行为并断言设置的内容是我所期望的。这是针对执行此类操作的特定情况:

配置.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(),但这似乎也不太正确。

4

1 回答 1

0

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

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

更新1:

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

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

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

于 2015-12-12T19:20:51.507 回答