2016-07-29 15 views
1

メソッド内でLocalDateTimeオブジェクトを使用してクラスをモックしようとしています。私を見つけたjava.time.LocalDateTimePowerMockitoを使用したLocalDateTimeの模擬

には見られない[ソースエラー] toInstant(java.time.ZoneOffset):

java.lang.IllegalStateException理由:クラスをモックすることは原因this関連する質問(クラスは最終的なもの) - とテストではそうしようとした:

PowerMockito.mockStatic(LocalDateTime.class); 

しかし、私はまだ同じエラーを取得します。非稼働テストのセットアップは、次のとおりです。

Mockitoはメソッド toInstant呼び出すことができるように私が正しく LocalDateTimeクラスをモックするにはどうすればよい
@Before 
public void setUp() { 
    PowerMockito.mockStatic(LocalDateTime.class); 
    LocalDateTime ld = LocalDateTime.now(); 
    Instant now = Instant.now(); 
    now.atOffset(ZoneOffset.UTC); 
    PowerMockito.when(LocalDateTime.toInstant(any(ZoneOffset.class))).thenReturn(now); // <= fails with above exception 
} 

?あなたは@PrepareForTest(LocalDateTime.class)を使用してテストのため、これらのクラスを用意する必要がJDKか​​らモッククラスに

+0

私は、あなたがリンクした答えの両方の点に同意します: 'LocalDateTime'と対話するクラスを@PrepareForTestする必要があります。理想的にはあなたのコードをリファクタリングする必要があります。テスト用のClockインスタンスを作成できます。二重引用符として閉じます。少なくとも@PrepareForTestで編集して、その答えが十分でない理由を示してください。 –

答えて

0

(そしてもちろん、あなたのテストランナーは

@RunWith(PowerMockRunner.class)でなければなりません。しかし良い方法はPowerMockitoを回避し、そのような中で、あなたのクラスを設計するだろうLocalDateTimeを注入する方法

PowerMockitoは、非常にまれにしか使用しないでください。最後の手段として、コードカバレッジを行う必要がありマネージャーがあなたの頭に銃を向けている場合にのみ使用してください簡単で簡単な方法で、良い方法ではありません。

+0

回答ありがとうございました!私は最終的に上級を嘲笑して解決しました。だから、PowerMockitoは、** LocalDateTime **で私のクラスを模擬しようとしませんでした。 – aurelien974

関連する問題