Я работаю над старым кодом, который не очень хорошо обрабатывает исключения. Один тест, который я пишу, заглушает метод, который генерирует исключение, которое мне нужно подтвердить, является правильным исключением. Единственный способ проверить это исключение, которое я вижу, - это захватить аргумент, когда он регистрируется и сравнивать строки.Mockito - Argument Captor не захватывает и не взаимодействует
Когда я запускаю это я получаю:
Wanted, но не вызывается: logger.error (Захватив аргумент)
На самом деле были нулевые взаимодействия с этим макетом
@Test
public void testRunCipherThrowsException() throws Exception
{
final Logger logger = mock(Logger.class);
ArgumentCaptor<Logger> argument = ArgumentCaptor.forClass(Logger.class);
when(cipher.doSomething(any(byte[].class))).thenThrow(new IllegalBlockSizeException("Bad block size"));
Mockito.verify(logger).error(argument.capture());
_task.run();
assertEquals("The execution failed. Details: Bad block size", argument.getValue().getName());
}
Вот фрагмент из класса, который я тестирую - в отладке я каждый раз нажимаю эту строку кода.
try
{
final byte[] result = cipher.doSomething(testData);
catch (final Exception ex)
{
_consequtiveFailures++;
_logger.error("The execution failed. Details: " + ex.getMessage(), ex);
}
Я попытался организовать тест несколькими способами, считая, что проверка может не правильно настроиться. Я также попробовал несколько разных способов установки объекта mock Logger. Это мой первый раз, используя аргумент-захватчик, поэтому, надеюсь, я просто пропущу что-то очевидное.
Большой проблемой был регистратор. Как только я получил это, все остальное встало на свои места. Спасибо. – Chad