繁体   English   中英

如何测试是否抛出异常?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM