【发布时间】:2012-04-06 06:51:20
【问题描述】:
我有一个这样的控制器:
def unCompletedTasks() {
def user = User.get(springSecurityService.principal.id)
def choice = params.managersProject
params.max = Math.min(params.max ? params.int('max') : 10,100)
def search = Tasks.createCriteria().list(max: params.max as Integer, offset: params.offset as Integer, order: params.order as String, sort : params.sort) {
and {
project {
like('name',"${choice}")
}
eq('completed',false)
lt('endDate',new Date().clearTime())
}
}
[tasksInstanceList : search, tasksInstanceTotal: search.getTotalCount() ]
}
我想测试一下。我在 Spock 中这样写了一个测试规范:
def 'user should be displayed unCompletedTasks' () {
setup: "set the required objects"
def tasksController = new TasksController()
tasksController.springSecurityService = [principal: [id:tasksInstance.id]]
tasksController.params.managersProject = "testing"
//other codings goes here
when:
def model = tasksController.unCompletedTasks()
then:
model.tasksInstanceTotal == 1
where:
//required fields
}
当我运行时,我收到这样的错误:
user should be displayed unCompletedTasks(mnm.schedule.TasksSpec)
| org.codehaus.groovy.runtime.typehandling.GroovyCastException: Cannot cast object 'null' with class 'org.codehaus.groovy.runtime.NullObject' to class 'java.lang.Integer'
at mnm.schedule.TasksController.unCompletedTasks(TasksController.groovy:39)
at mnm.schedule.TasksSpec.user should be displayed unCompletedTasks(TasksSpec.groovy:59)
我不知道我哪里出错了。
提前致谢。
【问题讨论】:
-
TasksController.groovy:39在哪一行代码? (因为我们这里没有行号)。 -
@JarredOlson:这是条件查询的开始:
def search = Tasks.createCriteria().list . . . . //other code。 -
我不确定为什么
as Integer中的任何一个会抛出该错误。我会尝试一次取出一个,看看是哪个(s)抛出错误。要记住的一件事是,通过 Web 界面,所有参数都将是字符串(如果它们没有值,则为空)。因此,要模拟您应该将所有非值参数设置为空字符串。例如,params.max ? params.int('max')params.max 行在生产代码中将是一个空字符串,但在您的测试中它被设置为 null。它似乎不是您问题的根源,但可以在以后挽救您。