2012-04-06 6 views
0

私はこのようなコントローラがあります:私はこれをテストしたいコントローラをテストするときに、なぜオブジェクト 'null'エラーをキャストできないのですか?

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

を。私はこのようなスポックのテスト仕様書を書いた:

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) 

私が間違っていたところ、私は知りません。

ありがとうございます。

+0

「TasksController.groovy:39」はどのコード行ですか? (ここには行番号がないので)。 –

+0

@JarredOlson:これは条件クエリの開始点です: 'def search = Tasks.createCriteria()。list。 。 。 。 //他のコード '。 –

+0

私はなぜそれらの「整数」がそのエラーを投げているのか分かりません。私はそれらを一度に1つずつ取り出して、どれがエラーを投げかけているのかを見てみよう。心に留めておくべきことの1つは、Webインターフェイスを通じて、すべてのパラメータが文字列(値を持たない場合は空)になります。したがって、値のないすべてのパラメータを空の文字列として設定する必要があることをエミュレートします。たとえば、 'params.max? params.int( 'max') 'params.maxは実動コードでは空の文字列になりますが、テストではnullに設定されています。それはあなたの問題の原因ではないようですが、後であなたを救うことができます。 –

答えて

関連する問題