如何对java中的类的特定方法在给定的持续时间内定期调用进行单元测试

如何对java中的类的特定方法在给定的持续时间内定期调用进行单元测试,java,junit,mocking,junit5,awaitility,Java,Junit,Mocking,Junit5,Awaitility,我正在创建一个错误处理程序。它将重复调用失败的方法,在给定的持续时间内有一些固定的延迟 例如 我有一个与外部世界交互的服务类 class Service { void doSomething(); } 我还为该服务提供了一个错误处理程序,它将重复调用service.doSomething,持续时间为5分钟,固定延迟为30秒 class ErrorHandler { private Service service; void handle() { //repea

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

例如

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

class Service {
   void doSomething(); 
}
我还为该服务提供了一个错误处理程序,它将重复调用service.doSomething,持续时间为5分钟,固定延迟为30秒

class ErrorHandler { 
   private Service service;

   void handle() {
     //repeatedly invoke service.doSomething();
   }
}
我如何为这个错误处理程序编写一个单元测试来测试它呢

服务

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

高度赞赏任何建议:

谢谢
Chintan

你可以让它睡觉,然后叫它自己吗?但是你会占据所有的记忆。 也许您甚至可以使用多线程?

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

最终列表=新的ArrayList; 服务服务=Mockito.mockService.class; Mockito.doAnswera->list.addLocalDateTime.now.whenservice.doSomething; 在本例中,每次调用该方法时,表示当前时间戳的LocalDateTime都会保存到列表中。
最后,您所要做的就是在列表中循环,比较相邻的日期,找到间隔,并将它们与预期值进行比较。第一个日期和最后一个日期之间的间隔将显示总持续时间。

可能的重复和重复。我不觉得这是一个重复的问题,因为问题不是关于如何模拟LocalDateTime或时钟。问题是如何衡量一段时间内方法调用的次数。非常感谢您分享这一技巧,这确实会奏效。感谢您分享您的想法。