【问题标题】:controller.modelAndView is null in integration testcontroller.modelAndView 在集成测试中为空
【发布时间】:2014-02-13 04:25:55
【问题描述】:

鉴于控制器中的此操作:

def listBlockedMembers() {
    def blocked = UserBlock.findAllByUser(springSecurityService.currentUser)

    render(view:'listBlockedMembers', model:[blocked:blocked])
}

在我的集成测试中,模型和视图工作正常:

def blocked = controller.modelAndView.model['blocked']
assertEquals 2, blocked.size()

但如果我通过这样的动作传递模型:

def listBlockedMembers() {
    def blocked = UserBlock.findAllByUser(springSecurityService.currentUser)
    [blocked:blocked]
}

访问controller.modelAndView 时出现空指针异常(modelAndView 属性本身的空指针)

我的集成测试扩展了GroovyTestCase。虽然第一个动作有效,但第二个动作更少,我想知道为什么会发生空指针异常。在开发中,gsp 对两种操作的呈现方式相同。

【问题讨论】:

    标签: grails testing integration-testing


    【解决方案1】:

    实际上有一个Grails bug,这与两种返回类型的处理方式不同:

    这里讨论了两种情况。一种是控制器中的方法返回 Map 的场景,一种是控制器中的方法不返回 Map 的场景。对于方法不返回 Map 的情况,为了便于讨论,我们讨论的是调用了 render 方法的方法。

    所以看起来当返回一个映射时,将其视为常规方法(并处理返回值)可能比调用controller.modelAndView 更好。例如:

    Map response = controller.listBlockedMembers()
    assert response.blocked
    

    【讨论】:

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