2017-09-15 10 views
-4

私は現在、テストで新しいDateTimeオブジェクトが作成されるたびに、それをインターセプトして定数(既定)のDateTimeオブジェクトを作成できるように、DateTimeオブジェクトをモックしようとしています。MockitoでJodatime DateTimeをモックする方法

私の実際の方法では、私はこのようなDateTimeオブジェクトを作成しています:

DateTime start = new LocalDateTime().toDateTime().minusHours(1)

DateTime end = new LocalDateTime().toDateTime()

今、私はLocalDateTimeを対象とDateTimeオブジェクトをあざけるが、どのように確認していないのです続行する:

@Mock 
DateTime dt; 

@Mock 
LocalDateTime ldt; 

@Test 
public void test() { 
    when(new DateTime()).thenReturn(????); // Stuck here. 
    when(new LocalDateTime().toDateTime()).thenReturn(dt); 
} 

助けていただければ幸いです。ありがとう!

答えて

0

静的メソッド呼び出し(またはコンストラクタ呼び出し)をMockitoでモックすることはできません。あなたはPowermockですることができますが、これはおそらく間違ったアプローチです。

Jodatimeの現在の時間の概念を制御するには、DateTimeUtils.setCurrentMillis* methodsの使用を検討してください。たとえば、時間を固定することができます。これの欠点は、グローバルな状態が変化しているため、予期しない影響があることです。テスト後に現在のミリ秒プロバイダをリセットする必要があります。

しかし、よりよい解決策は、あなたがDateTimeのインスタンスを作成することができ、テスト対象のクラスに何かを注入して、例えば、依存性注入を使用することですSupplier<DateTime>であるため、new DateTime()ではなく、非スタティックのsupplier.get()を呼び出します。

関連する問題