【发布时间】:2015-01-31 00:48:56
【问题描述】:
我正在处理一些不能很好地处理异常的旧代码。我正在编写的一个测试存根一个引发异常的方法,我需要确认它是正确的异常。我可以看到测试此异常的唯一方法是在记录参数时捕获参数并比较字符串。
当我运行它时,我得到:
需要但未调用: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());
}
这是我正在测试的类中的一个 sn-p - 在调试中,我每次都打那行代码。
try
{
final byte[] result = cipher.doSomething(testData);
catch (final Exception ex)
{
_consequtiveFailures++;
_logger.error("The execution failed. Details: " + ex.getMessage(), ex);
}
我尝试以几种不同的方式安排测试,认为验证可能无法正确设置。我还尝试了几种不同的设置模拟 Logger 对象的方法。这是我第一次使用参数捕获器,所以希望我只是遗漏了一些明显的东西。
【问题讨论】:
标签: java junit mockito error-logging