Насмешенный класс не является нулевым.Это скелет с той же сигнатурой, что и у исходного класса, но без реализации.Инструментарий «видит» вызовы всех методов, поэтому его можно проверить позже.Для этого имитируется объект, который не работает.Он не может хранить данные и не может выполнять методы.Вы можете контролировать только все вызовы и все возвращаемые значения макета.Если вам нужны более продвинутые макеты, вы должны использовать @Spy
.Шпион - это «фиктивный», но с оригинальной реализацией: это инструментальный класс для обнаружения всех вызовов к нему и управления выводом, НО также имеет оригинальные средства хранения и реальные вызовы.
Другой способ выполнения реальных вызовов заключается в следующем: Mockito.when(myMockedObject).thenCallRealMethod();
В модульном тестировании рекомендуется проверять ТОЛЬКО один класс, который вы тестируете, без базовых классов.Звучит как открытая дверь, но на самом деле это не так.Все классы, используемые классом, который вы тестируете, должны быть проверены.С макетом у вас есть полный контроль над возвращаемыми значениями, и вы можете проверить все угловые случаи для этого класса.Все классы, которые подвергаются проверке, должны быть проверены самими своими юнит-тестами.Это приводит к следующей проблеме: все используемые классы должны быть введены или изменены тестом.Вместо реального драйвера БД вы хотите иметь возможность вводить макет, чтобы вы могли видеть, все ли правильные вызовы сделаны.