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