【发布时间】:2012-09-24 14:49:56
【问题描述】:
是否可以直接为 Grails 单元测试类的特定方法设置 System.property?
如果在 Config.groovy 中设置了系统属性,我有一个 Filters 类会阻止一些操作:
class MyFilters {
def filters =
{
if ('true'.equals(System.properties.getProperty('myProperty', 'false'))){
writeFilter(controller: "myController", action: "update")
{
before =
{
response.sendError(HttpServletResponse.SC_FORBIDDEN);
return false;
在 MyControllerTests 中,我正在尝试对过滤器进行测试:
void testMyFilter(){
System.properties.setProperty('myProperty', 'true')
withFilters(action:"update") {
controller.update()
}
assert response.status == HttpServletResponse.SC_FORBIDDEN
}
但是过滤器类在这个阶段已经被模拟了(使用来自 Config 的默认 'false' 属性值)所以测试中属性的更改没有效果。
有没有办法解决这个问题,或者有办法强制 Grails 在 prop 更改后重新加载 Filters 类?我无法更改 Config 中的默认属性,因为其他控制器测试将中断,它仅适用于将设置此道具的特定环境,因此我希望检查过滤器的测试所涵盖的场景将启动。
谢谢。
【问题讨论】:
-
不可避免地,我在发布这篇文章大约一分钟后发现了如何去做。在 setProperty 之后添加 mockFilters(MyFilters) 会使 Grails 使用更新的属性重建模拟过滤器。 (自我回答太新了,我会尽快关闭这个问题)。
-
请发表您的评论作为答案,以便可以关闭此问题。
标签: unit-testing grails groovy