これがコードなのかテストなのかはわかりません。
オブジェクトのステータス変更とそれらの変更履歴を追跡する必要があります。最新のステータスのみを表示する必要がある場合もあれば、履歴リスト全体が必要な場合もあります。
当初、私たちはドキュメント (grails.org/doc/2.2.x/ref/Database%20Mapping/sort.html) とこの男が見つけたもの (stackoverflow.com/questions/12482995/sort-a- collection-in-grails-by date ) であり、ゴールデンでした。
単体テストの時間に来て、2 つのステータスを作成し、最新のものをプルするテストを作成しました。ビンゴそれは動作します。次に、トラブル。ランダムな間隔で、テストは失敗します。つまり、ソートが機能しないことについてこの男が発見したことを見つけているようです。明らかな何かを見落としているのかもしれませんが、新鮮な目で見られることを願っています。
class mainObject {
static hasMany = [ statusHistory : StatusHistory]
static mapping = {
sort id: 'asc'
statusHistory sort:"statusDate"
}
String getCurrentStatus(){
if (!this.statusHistory){
return""
}else{
this.statusHistory.sort{it.sstatusDate}
return statusHistory.status.first()
}
}
}
class statusHistory {
static mapping = {
sort statusDate: "asc"
}
static belongsTo = [ mainObjects : MainObject]
Date statusDate
String strStatus
String notes
String toString(){
if (statusDate ==null){
return "${strStatus}" + " - No Date"
}else{
return "${strStatus}" +" - "+ "${statusDate.getDateString()}"
}
}
}
単体テスト
@TestMixin(GrailsUnitTestMixin)
class MainObjectTests {
def util = new UnitTestUtil()
def mockMainObj
@Before
void setUp {
mockMainObj = util.initMockMainObj()
mockForConstraintsTests(MainObject, [mockMainObj])
}
void testgetCurrentStatus(){
assertEquals("", mockMainObj.getCurrentStatus())
def mockObjStatus1 = util.initMockStatus(mockMainObj, new SimpleDateFormat(dd/MM/yyyy hh:mm:ss).parse("01/12/2008 15:00:00"), "First Status")
mockDomain (StatusHistory, [mockObjStatus1])
mockForConstaintsTests (StatusHistory, [mockObjStatus1])
mockObjStatus1.save()
assertEquals(1, mockMainObj.statusHistory.size())
assertEquals("First Status", mockMainObj.getCurrentStatus())
def mockObjStatus2 = util.initMockStatus(mockMainObj, new Date(), "Latest Status")
mockDomain (StatusHistory, [mockObjStatus2])
mockForConstaintsTests (StatusHistory, [mockObjStatus2])
mockObjStatus2.save()
assertEquals(2, mockMainObj.statusHistory.size())
assertEquals("Latest Status", mockMainObj.getCurrentStatus())
}
}
このブログと Beckwith 氏 ( www.infoq.com/presentations/GORM-Performance )
しかし、私はドキュメントに戻って自分のコードを見て、それが正しいと考え続けています。だから私は今循環参照にいます。どんな助けでも大歓迎です。