Как можно юнит-тестирование, чтобы определенный c метод класса в java периодически вызывался в течение заданной продолжительности - PullRequest
0 голосов
/ 04 марта 2020

Я в процессе создания обработчика ошибок. Который будет неоднократно вызывать сбойный метод с некоторыми фиксированными задержками в течение заданной продолжительности.

Пример.

У меня есть класс обслуживания, который взаимодействует с внешним миром.

class Service {
   void doSomething(); 
}

И у меня также есть обработчик ошибок для этой службы, который будет неоднократно вызывать service.doSomething() в течение 5 минут с некоторой фиксированной задержкой в ​​течение 30 секунд.

class ErrorHandler { 
   private Service service;

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

Как написать модульный тест для этого обработчика ошибок, чтобы проверить, действительно ли

service.doSomething ()

неоднократно вызывался в течение 5 минут. Мне известно, что режим проверки mockito предоставляет различные варианты проверки количества раз. Но в этом случае мне особенно интересно проверить, что метод неоднократно вызывался в течение заданной продолжительности . Я также изучил awaitility , но не уверен, есть ли у него какой-либо метод, который может помочь.

Высоко ценю любые предложения:)

Спасибо Chintan

Ответы [ 2 ]

1 голос
/ 04 марта 2020

Вы можете сделать это, смоделировав метод doSomething() и предоставив собственную реализацию, которая записывает время вызова метода. Вот пример:

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

В этом примере каждый раз, когда вызывается метод, LocalDateTime, представляющий текущую метку времени, сохраняется в списке. Наконец, все, что вам нужно сделать, это l oop просмотреть список, сравнить соседние даты, найти интервалы и сравнить их с ожидаемым значением. Интервал между первой и последней датой покажет вам общую продолжительность.

0 голосов
/ 04 марта 2020

Вы можете просто дать ему уснуть, а затем позвонить себе? Но тогда вы заберете всю память. Может быть, вы можете даже go до многопоточности?

...