У меня проблема с пониманием семантики за следующим фрагментом кода.Понимание семантики за проверкой Mockito
@Test
public void TestAbc() throws AbcException {
// method to test
object.handle();
// assertions
verify(someThing).someMethod();
verify(problemObject).problemMethod();
}
Если определение метода ручки выглядит следующим образом:
public void handle() {
try {
someThing.someMethod();
// throws AbcException
problemObject.problemMethod();
}
catch (AbcException e) {
LOGGER.error(e.getMessage());
}
}
Сейчас в моем тесте я делаю throws AbcException
, чтобы держать вещи синтаксически правильно, но это не имеет смысла, так как я ловя исключение в методе дескриптора и не бросает его дальше. Но метод теста переводится как «TestAbc
throws AbcException
», что на самом деле не так. Поэтому моя проблема заключается в том, почему мне нужно добавить throws AbcException
в свой тестовый метод, даже его не выбрасывать? Может ли кто-нибудь помочь мне понять это?
полностью имеет смысл, но интерпретация моих тестов - это метод обработки вызова и проверка того, что проблема называется метод. Я вижу, что это необходимо для поддержания синтаксически правильной работы, но логически это не имеет большого смысла, поскольку мой метод тестирования (и не может) бросать AbcException. –
Ну, это логично в логической структуре правил синтаксиса языка программирования. Из-за творческих приемов Mockito вы находитесь в ситуации, когда у вас есть больше информации, чем то, что вы можете выразить с помощью правил синтаксиса («этот вызов метода на самом деле не вызывает это исключение»), поэтому синтаксический анализ не может сделать правильный умозаключение. –