0

setupブロックが次のように見えるSpockテストケースがあります。

setup: "set the required objects"
        def company = new Company(shortName:"infyyy",fullName:"infoysys",
            region:"tamilnadu" ,email:"a@ac.com" ,telphone:34343433,fax:34343433).save(failOnError:true)
        def project = new Project(name:"testing")
        def userInstance = new User(username:username,password:password,
            company:company,project:project,pt:["dummy"]).save(failOnError:true)
        def tasksInstance = new Tasks(title:"testingwork",startDate:(new Date()-4),endDate:(new Date().clearTime()-6),description:"blah blah",project:project,completed:true,user:userInstance).save(failOnError:true)

さらに、Tasksドメイン クラスは次のようになります。

class Tasks {
    static belongsTo = [ user : User, project: Project ]
        //other code
}

クラスUserは次のようになります。

class User  {
        static hasMany = [ holidays : Holiday, tasks : Tasks, pt:String, project: Project ]
        //other code
}

しかし、テストを実行するとテストが失敗し (エラー メッセージは表示されませんがthen、Spock テストのブロックで失敗します)、エラーが見つかります。User私のセットアップでは と の間に関係が作成されないためTasks、テストが失敗します。

私がテストしようとしているコントローラーコードは次のとおりです。

def todaysTasks() {
        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('endDate', new Date().clearTime())
            }
        }
        println "todays task selected project is " + search
        [tasksInstanceList : search, tasksInstanceTotal: search.getTotalCount() ]
    }

上記printlnのテスト印刷の0. endDateテストで を今日の日付よりも小さくしているのに、なぜこれが起こるのですか? 前もって感謝します。

4

2 に答える 2

1

私の知る限り、GORMはbelongsTo関係に従うことによって関係を自動入力しません。

私はいつも次のことをします。

def u=new User(...)
u.addToTasks(
   title:"testingwork",
   startDate:(new Date()-4),
   endDate:...
)
u.save()

タスクオブジェクトを作成していないことに注意してください。値のマップをaddToXに直接渡しました...これは、追加されたオブジェクトがUserに属し、GORMによってインスタンス化および保存される必要があることを強調しています。

于 2012-04-12T08:21:07.043 に答える
0

単体テストで条件クエリをテストすることはできません (すべきではありません)。Criteria queires は、grails (および spock) 単体テストではサポートされていません。考えられる解決策については、この質問をお読みください。

于 2012-04-12T11:59:51.980 に答える