私は現在の時刻に対して日付と時刻の計算を行うコードをいくつか書いています。 Joda時間では、これは不変オブジェクトであるため、(Java)コンストラクタによってアクセスされます。 new DateTime()
が特定の定数の瞬間を返すように模擬できるようにする必要がありますので、合理的なテストアサーションを行うことができますが、他のDateTimeメソッドだけを残しておきます。Grailsでは、Jodaの時間を使って現在の時間を模擬する良い方法がありますか?
これは厄介なことを証明しています。 Grails mockFor(DateTime, true)
は、Javaコンストラクタを模倣することはできませんが、Joda時間で時間を取得するための明示的または可読な非コンストラクタの方法はありません。
利用可能なオプションは、JMockitやEasyMock 3クラスのような低レベルのJVMテクニックだけで、Grailsの痛みです。これを達成するための簡単な方法がありますか?
偉大な答え。私は、このテストを可能にするためだけに、システムを異なる方法で構築することを避けたいと思っていたことがありましたが、コンストラクタをモックするのがどれほど苦労しているかについて多くを学んできました。おかげさまで –
私は直接コンストラクタの呼び出しを避けようとします。これは "インタフェース用のコード"に違反します。作成されたインスタンスはテストのように外部化することができず、時には '構築ブロブ 'になります。それで、それは依存性注入の形になった。 –