2012-09-24 60 views
0

是否可以直接为Grails单元测试类的特定方法设置System.property?Grails set系统属性测试

我有一个过滤器类,阻止了一些行动,如果一个系统属性中设置Config.groovy文件:

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中更改默认属性,因为其他控制器测试会中断,只是针对特定环境设置了此道具,因此我希望通过检查过滤器的测试覆盖场景。

谢谢。

+0

不可避免地,我发现如何做到这一点约一分钟后,我发布了这个。 在setProperty之后添加mockFilters(MyFilters)使Grails使用更新的属性重建模拟过滤器。 (对于自我回答来说太新了,我会尽可能地关闭这个问题)。 – spacebot

+0

请发表评论作为回答,因此这个问题可能被关闭。 –

回答

1

不可避免地,我发现如何做到这一点,我发布后约一分钟。在setProperty之后添加mockFilters(MyFilters)使Grails使用更新的属性重建模拟过滤器。