Grails controller.modelAndView在集成测试中为空

Grails controller.modelAndView在集成测试中为空,grails,testing,integration-testing,Grails,Testing,Integration Testing,在控制器中执行此操作: def listBlockedMembers() { def blocked = UserBlock.findAllByUser(springSecurityService.currentUser) render(view:'listBlockedMembers', model:[blocked:blocked]) } 在我的集成测试中,模型和视图运行良好: def blocked = controller.modelAndView.model['bl

在控制器中执行此操作:

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对这两种行为的处理是相同的。

这实际上有一个原因,它与两种不同的退货类型有关:

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

因此,在返回映射时,最好将其视为常规方法(并处理返回值),而不是调用
controller.modelAndView
。例如:

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