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()?