【问题标题】:Grails set System property for testGrails 设置系统属性进行测试
【发布时间】: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


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-04-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-06-15
    • 2014-02-04
    相关资源
    最近更新 更多