[英]How to test if an exception was thrown?
我的代码:
public String getTemplate(TestType fileType) {
Util util = new Util();
try {
return util.addPrefix(util.getTemplate(fileType));
} catch (IOException e) {
logger.warn(e.getMessage());
throw new MyException(...);
} catch (SyntaxException e) {
logger.warn(e.getMessage());
throw new MyException(...);
}
}
测试 class:
TestType testType = TestType.main;
Util util = spy(new Util()); //or Util util = mock(Util.class);
when(util.getTemplate(testType)).thenThrow(new SyntaxException(...)); //or IOException
String out = runService.getTemplate(testType);
但它不起作用。 由于此方法创建了一个新的 class。 是否可以在不使用 PowerMock 的情况下模拟新内部 class 的创建?
也许尝试使用 junit 和assertThrows
function。 你可以在这里找到更多信息
前段时间我写了这个测试。
try {
Mockito.when(tagDao.findAllTags()).thenReturn(expectedTagList);
TagService tagService = new TagServiceImpl(tagDao);
List<Tag> actualTagList = tagService.findAllTags();
assertEquals(actualTagList, expectedTagList);
} catch (DaoException | ServiceException e) {
fail(e);
}
您可以尝试将fail(e)
更改为assertEquals
或其他,这将验证您的异常。
如果你问我哪种方法更好,我会说第一种更容易理解和阅读。
您没有检查测试代码中的任何抛出。 您的测试 class 仅通过调用.thenThrow 来模拟“getTemplate()”的行为:
csvUtil.getTemplate(testType)
如果要检查是否引发异常,可以使用许多断言库。 例如使用 junit.jupiter 你可以通过调用来执行它:
assertThatExceptionOfType(YourExceptionClass.class)
.isThrownBy(() -> csvUtil.getTemplate(testType));
您还可以(如果需要)检查该异常是否有特定消息,例如:
assertThatExceptionOfType(YourExceptionClass.class)
.isThrownBy(() ->
csvUtil.getTemplate(testType)
).withMessage("expected message here");
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.