Mock объекта, создаваемого внутри метода

есть такой код:

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

Необходимо протестировать, что IOException и SyntaxException перехватываются и выбрасывается моя ошибка с заданным текстом.

TestType testType = TestType.main;
Util util = spy(new Util()); //or Util util = mock(Util.class);
when(util.getTemplate(testType)).thenThrow(new SyntaxException(...)); //or IOException


assertThatThrownBy(() ->
    runService.getTemplate(testType)).isExactlyInstanceOf(MyException.class);

Проблема в том, что .thenThrow() не вызывает ошибку. Я так понимаю, это потому что в методе getTemplate() создается новый объект new Util() (подправьте, если ошибаюсь)

Таким образом, мой код успешно выполняется и никакие ошибки не выбрасываются... Можно ли как-то замокать внутреннее создание объекта Util util = new Util()?


Ответы (0 шт):