beforeInterceptor的测试用例

时间:2014-06-03 10:34:24

标签: unit-testing grails testing integration-testing spock

以下是我的beforeInterceptor

def beforeInterceptor = {
    log.debug "============${actionName}=========="       
    if (!(actionName in ['search'])) {
        redirect controller: 'error', action: 'denied'
        return false
    }
}

我不知道如何编写beforeInterceptor的测试。我用google搜索但没有运气。我有tried自己编写测试用例但无法在beforeInterceptor中获取actionName

when:
    controller.beforeInterceptor()

when:
    controller.beforeInterceptor.call()
    controller.history(ticket)

每次我在actionName中都为空。

有人有任何想法:如何编写beforeInterceptor的测试用例integrationunit)?

2 个答案:

答案 0 :(得分:1)

我为此创建了单元测试,我们可以在那里设置动作名称。我直接调用了beforeInterceptor,如:

@TestFor(PersonController)
@Mock([Person])
class PersonControllerSpec extends Specification {

  def setup() {
  }

  def cleanup() {
  }

  void "test beforeInterceptor"() {
    when:
    webRequest.actionName = "index"
    controller.beforeInterceptor()

    then:
    controller.response.redirectedUrl == '/error/denied'

    when:
    controller.response.reset()
    webRequest.actionName = "search"
    controller.beforeInterceptor()

    then:
    controller.response.redirectedUrl != '/error/denied'
  }
}

答案 1 :(得分:0)

  

Grails在调用时不会调用拦截器或servlet过滤器   集成测试期间的操作。你应该测试拦截器和   隔离过滤器,必要时使用功能测试。

use and test with a filter会更容易。