0

私はこのような統合テストケースを持っています:

void testSomething() {
       def cardTable = new CardStorage();
        cardTable.cardSecurityCode = "something"
        def date = new Date() 
        System.metaClass.static.currentTimeMillis = { 
            Calendar cal = Calendar.getInstance();
            cal.set(Calendar.HOUR_OF_DAY,11);
            cal.set(Calendar.MINUTE,0);
            cal.set(Calendar.SECOND,0);
            cal.set(Calendar.MILLISECOND,0);
            return date.getTime()
        } 
        assert cardTable.save(flush:true) //this works.
}

行:cardTable.save(flush:true) は機能しています。を主張しtrueます。ただし、問題は、dateCreatedフィールドが()と同じであるということnew Date()です。どうしてこんなことが起こるのだろうか。currentTimeMillis私は私の要求に従ってメソッドをコーディングしたので。しかし、それでもグレイルズはそれを拾いません。しかし、私の新しいcurrentTimeMillisものは機能していると確信しています(エラーが発生すると、コンパイルエラーが発生します)。

私が行方不明になっているところは?単独でテストするためにタイムスタンプ機能を無効にするにはどうすればよいですか?

前もって感謝します。

4

2 に答える 2

1

のコア ライブラリの Java コードはnew Date()、Groovy メタクラス コードの変更を反映しません。

joda-time (make dateCreateda DateTime) を使用して現在の時刻を設定することをお勧めします。

さらに良い方法は、コードを現在の時刻に関連付けるのではなく、外部からクラスに時刻を渡すことです。

于 2012-08-14T09:27:14.193 に答える
0

「dateCreated」を使用しないでください。grails が自動的に入力します。

于 2012-08-15T00:19:57.327 に答える