mockito 如何测试是否引发了异常?

zbdgwd5y  于 2022-11-08  发布在  其他
关注(0)|答案(2)|浏览(239)

我的代码:

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(...);
    }
}

测试类别:

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);

但是它不起作用。因为这个方法创建了一个新的类。有没有可能在不使用PowerMock的情况下模拟创建一个新的内部类呢?

cld4siwp

cld4siwp1#

也许可以尝试使用junit和assertThrows函数。您可以找到更多信息here
前段时间我写了这个测试。

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或smth else,这将验证您的异常。
如果你会问我哪种方法更好,我会说第一种方法更容易理解和阅读。

9w11ddsr

9w11ddsr2#

您没有检查测试代码中的任何抛出。您的测试类只通过调用.thenThrow来模拟“getTemplate()”的行为:

csvUtil.getTemplate(testType)

如果你想检查是否抛出了异常,你可以使用许多Assert库。例如,使用junit.jupiter,你可以通过调用:

assertThatExceptionOfType(YourExceptionClass.class)
                .isThrownBy(() -> csvUtil.getTemplate(testType));

您还可以(如果需要)检查该异常是否具有特定消息,例如:

assertThatExceptionOfType(YourExceptionClass.class)
                .isThrownBy(() ->
                       csvUtil.getTemplate(testType)
                ).withMessage("expected message here");

相关问题