Grails为测试设置了System属性

时间:2012-09-24 14:49:56

标签: unit-testing grails groovy

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

我有一个Filters类,如果在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重新加载Filters类的方法?我无法更改Config中的默认属性,因为其他控制器测试将会中断,它只适用于将设置此prop的特定环境,因此我希望检查Filter将启动的测试所涵盖的场景。 / p>

感谢。

1 个答案:

答案 0 :(得分:1)

不可避免地,我在发布这个帖子后一分钟后发现了怎么做。在setProperty之后添加mockFilters(MyFilters)使Grails使用updated属性重建模拟过滤器。