0

我正在创建一个错误处理程序。这将重复调用一个失败的方法,在给定的持续时间内有一些固定的延迟。

例子。

我有一个与外界交互的服务类。

class Service {
   void doSomething(); 
}

而且我还有一个用于该服务的错误处理程序,它将重复调用service.doSomething()5 分钟,并有 30 秒的固定延迟。

class ErrorHandler { 
   private Service service;

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

我如何为这个错误处理程序编写一个单元测试来测试它

服务.doSomething()

在 5 分钟内被反复调用。我知道 mockito 的验证模式提供了不同的选项来验证次数。但在这种情况下,我特别有兴趣测试一个方法在给定的持续时间内被重复调用。我也探索了等待,但不确定它是否有任何可以提供帮助的方法。

非常感谢任何建议:)

谢谢钦坦

4

2 回答 2

1

您可以通过模拟doSomething()方法并提供您自己的实现来记录该方法被调用的时间。这是一个例子:

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

在此示例中,每次调用该方法时,都将LocalDateTime表示当前时间戳保存到一个列表中。最后,您所要做的就是遍历列表,比较相邻日期,找到间隔并将它们与预期值进行比较。第一个日期和最后一个日期之间的间隔将显示总持续时间。

于 2020-03-04T13:22:32.980 回答
0

你可以让它休眠然后调用自己吗?但是你会占用所有的内存。也许您甚至可以使用多线程?

于 2020-03-04T12:31:35.797 回答