【问题标题】:Invalidate a session for a filter unit test in Grails使 Grails 中过滤器单元测试的会话无效
【发布时间】:2013-02-13 15:00:16
【问题描述】:

我想测试一个过滤器来验证会话是否有效,但我不知道该怎么做。

我的过滤器是这样的。

class SampleFilters {
  def filters = {
    sessionFilter(controller:'*', action:'*') {
        before = {
            if(request.getRequestedSessionId() != null && !request.isRequestedSessionIdValid()) {
                //doSomething
            }
        }
    }
  }
}

我想为此过滤器创建一个单元测试。我想要的是在运行测试时它应该输入“if”子句来执行“doSomething”。目前,我有这样的东西。

import grails.test.mixin.*
import grails.test.mixin.web.FiltersUnitTestMixin;

import org.junit.*;

@TestMixin(FiltersUnitTestMixin)
class SessionFiltersTests {
  def controller

  @Test
  void testFilter() {
    controller = mockController(TestController)

    //I want to make sure when running the test it will enter the "if" clause

    withFilters(action: "testAction") { controller.testAction() }
    assert response.text
  } 
}

我仍然是单元测试的新手,所以如果有人可以帮助我,我将不胜感激。

谢谢!

【问题讨论】:

    标签: session testing grails filter invalidation


    【解决方案1】:

    我找到了一种方法来做到这一点。我不知道这是否是最好的选择,但我已经没有想法了。我就是这样离开的:

    import grails.test.mixin.*
    import grails.test.mixin.web.FiltersUnitTestMixin;
    
    import org.junit.*;
    
    @TestMixin(FiltersUnitTestMixin)
    class SessionFiltersTests {
      def controller
    
      @Test
      void testFilter() {
          controller = mockController(TestController)
          // Simulate session timeout
          controller.request.requestedSessionId = 1
          controller.request.requestedSessionIdValid = false
          withFilters(action: "test") { controller.test() }
          // Add your asserts
      }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-05-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多