Unit testing Grails为测试设置系统属性

Unit testing Grails为测试设置系统属性,unit-testing,grails,groovy,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",

是否可以直接为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类?我无法更改配置中的默认属性,因为其他控制器测试将中断,这只是针对将设置此道具的特定环境,因此我希望通过检查过滤器将启动的测试涵盖该场景


谢谢。

不可避免的是,我在发布这篇文章一分钟后就知道了如何做。在setProperty之后添加mockFilters(MyFilters)会使Grails使用更新的属性重新生成模拟过滤器

不可避免的是,我在发布这篇文章一分钟后就知道了该怎么做。在setProperty之后添加mockFilters(MyFilters)会使Grails使用更新的属性重新生成模拟过滤器。(太新,无法自行回答,我会在可能的情况下关闭此问题)。请将您的评论作为答案发布,以便关闭此问题。