0

是否可以直接为 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' 属性值),所以测试中属性的更改没有效果。

有没有办法解决这个问题,或者在 prop 更改后强制 Grails 重新加载 Filters 类?我无法更改 Config 中的默认属性,因为其他控制器测试将中断,它仅适用于将设置此道具的特定环境,因此我希望检查过滤器的测试所涵盖的场景将启动。

谢谢。

4

1 回答 1

1

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

于 2012-09-27T16:50:06.170 回答