Я работаю над старым кодом, который не очень хорошо обрабатывает исключения. Один тест, который я пишу, заглушает метод, который выдает исключение, которое мне нужно подтвердить, является правильным исключением. Единственный способ проверить это исключение, которое я вижу, — это зафиксировать аргумент, когда он регистрируется, и сравнить строки.
Когда я запускаю это, я получаю:
Разыскивается, но не вызывается: 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);
}
Я пытался организовать тест несколькими способами, думая, что проверка может быть настроена неправильно. Я также пробовал несколько разных способов настройки фиктивного объекта Logger. Я впервые использую средство захвата аргументов, поэтому, надеюсь, я просто упускаю что-то очевидное.