2012-04-06 6 views
0

Ich habe einen Controller wie folgt aus:Warum bekomme ich beim Testen meines Controllers den Fehler 'Null' des Objekts nicht umsetzen können?

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() ] 
    } 

ich dies testen möchten. Ich schrieb eine Testspezifikation in Spock wie folgt aus:

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 
    } 

Wenn ich laufe, ich ein Fehler wie diese:

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) 

Ich weiß nicht, wo ich schief gelaufen ist.

Vielen Dank im Voraus.

+0

Welche Codezeile ist 'TasksController.groovy: 39' on? (da wir hier keine Zeilennummern haben). –

+0

@ JarredOlson: das ist der Beginn der Kriterienabfrage: 'def search = Tasks.createCriteria(). List. . . . // anderer Code'. –

+0

Ich bin mir nicht sicher, warum irgendwas von 'as Integer' diesen Fehler werfen würde. Ich würde versuchen, sie nacheinander herauszunehmen und zu sehen, welche den Fehler werfen. Eine Sache zu beachten ist, dass über eine Webschnittstelle alle Parameter Strings sind (leer, wenn sie keinen Wert haben). Um also zu emulieren, sollten Sie alle Nicht-Wert-Parameter als leere Strings setzen. Zum Beispiel in der Zeile 'params.max? params.int ('max') 'params.max wäre eine leere Zeichenkette im Produktionscode, wird aber in Ihrem Test als Null gesetzt. Es scheint nicht die Quelle Ihres Problems zu sein, aber könnte Sie später speichern. –

Antwort