Ваш тест неверен, чтобы ожидать это
@Test(expected = ExecutionException.class)
Если вы посмотрите на свой код, вы увидите, что вы поймали, зарегистрировали и проглотили это исключение. Он никогда не перебрасывается, поэтому ваш тест не должен этого ожидать.
Кроме этого, ваш тест выглядит в целом правильно. У вас нет средств для каких-либо значимых утверждений, поскольку регистратор имеет следующий статус: c.
. Это немного вводит в заблуждение
Mockito.doThrow(ExecutionException.class)
, поскольку ExecutionException
вы пытаетесь поймать исключение, которое Retryer
должно обернуть оригинальное исключение. То, что вы сейчас симулируете, это ExecutionException
обёртка ExecutionException
. Это будет работать ради вашего теста, но не реально c. Я бы добавил генерик c Exception.class
(который затем будет обернут).
В вашем коде есть небольшая ошибка, которая может привести к вводящей в заблуждение регистрации. Эта строка будет выполняться, даже если исключение было сгенерировано, перехвачено и зарегистрировано.
LOG.info("Cache has been updated.");
У вас есть два варианта: вы можете поместить return
в перехват или переместить строку регистрации.
try {
retryer.call(updateCache);
LOG.info("Cache has been updated."); // this
} catch (ExecutionException | RetryException e) {
e.printStackTrace();
LOG.error(e);
LOG.error("Exception when refreshing the cache.");
return; // or this
}