我如何对 java 中的 class 的特定方法在给定持续时间内定期调用进行单元测试
How can I Unit test that a specific method of a class in java was periodically invoked for a given duration
我正在创建错误处理程序。这将重复调用失败的方法,在给定的持续时间内有一些固定的延迟。
例子。
我有一个与外界交互的服务class。
class Service {
void doSomething();
}
而且我还有一个用于该服务的错误处理程序,它将重复调用 service.doSomething()
持续 5 分钟,固定延迟 30 秒。
class ErrorHandler {
private Service service;
void handle() {
//repeatedly invoke service.doSomething();
}
}
我如何为这个错误处理程序编写单元测试来测试它确实
service.doSomething()
在 5 分钟内被重复调用。我知道 mockito 的 verificationmode provides different options to verify number of times. But in this case I'm specifically interested to test that a method was repeatedly invoked within a given duration . I've also explored 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
都会保存到列表中。
最后,您所要做的就是遍历列表,比较相邻日期,找到间隔并将它们与预期值进行比较。第一个和最后一个日期之间的间隔将显示总持续时间。
我正在创建错误处理程序。这将重复调用失败的方法,在给定的持续时间内有一些固定的延迟。
例子。
我有一个与外界交互的服务class。
class Service {
void doSomething();
}
而且我还有一个用于该服务的错误处理程序,它将重复调用 service.doSomething()
持续 5 分钟,固定延迟 30 秒。
class ErrorHandler {
private Service service;
void handle() {
//repeatedly invoke service.doSomething();
}
}
我如何为这个错误处理程序编写单元测试来测试它确实
service.doSomething()
在 5 分钟内被重复调用。我知道 mockito 的 verificationmode provides different options to verify number of times. But in this case I'm specifically interested to test that a method was repeatedly invoked within a given duration . I've also explored 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
都会保存到列表中。
最后,您所要做的就是遍历列表,比较相邻日期,找到间隔并将它们与预期值进行比较。第一个和最后一个日期之间的间隔将显示总持续时间。