どのようにすることができます私はユニットテストのJavaにおけるクラスの特定のメソッドを定期的に与えられた期間中に呼び出されたことを

cmodha:

私は、エラーハンドラを作成するプロセスにいますよ。どちらが繰り返し与えられた期間にわたって、いくつかの固定遅延で、失敗したメソッドを呼び出します。

例。

私は、サービスクラス外の世界との相互作用を持っています。

class Service {
   void doSomething(); 
}

そして、私はまた、繰り返し起動するそのサービスのエラーハンドラ持っているservice.doSomething()30秒のためのいくつかの固定遅延で、5分の期間を。

class ErrorHandler { 
   private Service service;

   void handle() {
     //repeatedly invoke service.doSomething();
   }
}

どのように私は実際にテストするには、このエラーハンドラのためのユニットテストを書くことができます

service.doSomething()

繰り返し5分の期間中に呼び出されました。私はmockitoのことに注意していverificationmodeは回数を確認するために、さまざまなオプションを提供します。しかし、この場合、私が特別というテストに興味の方法を繰り返し与えられた期間内に呼び出されました私はまた、探検しましawaitilityを、それが缶助けていることのいずれかの方法を持っているかどうかわからないけど。

非常に任意の提案に感謝:)

ありがとう熟考

パベル・スミルノフ:

あなたはあざけることによってそれを行うことができますdoSomething()方法をし、メソッドが呼び出される時間を記録する独自の実装を提供します。ここでは例を示します。

final List<LocalDateTime> list = new ArrayList<>();
Service service = Mockito.mock(Service.class);
Mockito.doAnswer(a -> list.add(LocalDateTime.now())).when(service).doSomething();

この例では、各時刻方法は、呼び出されるLocalDateTimeリストに保存された現在のタイムスタンプを表します。最後に、あなたがしなければならないすべては、間隔を見つけると期待値とそれらを比較し、近隣の日付を比較、リストをループにあります。最初と最後の日付の間の間隔は、あなたの合計時間が表示されます。

おすすめ

転載: http://43.154.161.224:23101/article/api/json?id=23500&siteId=1