1

grailsユニットテストでドメインクラスを要求すると、プロパティへの参照が欠落していることに気付きました。

ユニットテストのどこか

mockDomain(Event)

10.times {
    e   = new Event(eventCalendar:ec, title:"$ec - Event $it", details:"some detail", location:"some location", startDate: now, endDate: now+1)
    e.save()
}

Event.groovy

static beforeInsert = {
    if (!endDate) {
        // do something about it
    }
}

結果のエラー

No such property: endDate for class: myproj.Event Possible solutions: endDate

groovy.lang.MissingPropertyException: No such property: endDate for class: myproj.Event
Possible solutions: endDate
    at myproj.Event$__clinit__closure5.doCall(Event.groovy:74)
    at myproj.Event$__clinit__closure5.doCall(Event.groovy)
    at grails.test.MockUtils.triggerEvent(MockUtils.groovy:724)
    at grails.test.MockUtils$_addDynamicInstanceMethods_closure68.doCall(MockUtils.groovy:752)
    at grails.test.MockUtils$_addDynamicInstanceMethods_closure68.doCall(MockUtils.groovy)
    at myproj.EventCalendarTest$_testCreateAndDeleteCalendarWithEvents_closure1.doCall(EventCalendarTest.groovy:43)
    at myproj.EventCalendarTest.testCreateAndDeleteCalendarWithEvents(EventCalendarTest.groovy:40)
  1. どうすればまだ動作テストを作成できますか?
  2. スタックトレースが、欠落していると述べているプロパティを示唆しているのはなぜですか?
4

1 に答える 1

2

イベント ハンドラーを静的クロージャーとして誤って定義しました。

static beforeInsert = {
    if (!endDate) {
        // do something about it
    }
}

endDate(おそらく) 非静的プロパティであるため、ここにはアクセスできません。イベント ハンドラーを非静的に変更すると、問題が解決するはずです。

def beforeInsert = {
    if (!endDate) {
        // do something about it
    }
}
于 2011-05-04T13:43:57.210 に答える