Почему нельзя просто замокать класс и зачем нужен интерфейс
Что проверяют
Знаете ли вы, во что упирается подмена классов на JVM и в тестах под Android, и понимаете ли, что интерфейс решает тут не только техническую проблему, но и проблему связанности.
Как отвечать
Технически. В Kotlin классы и методы по умолчанию финальные, а классический мок работает наследованием: переопределить то, что запрещено переопределять, он не может. Обходы есть, встроенный mock maker и MockK правят байткод через агент, но это медленнее, чувствительно к обновлениям и в инструментальных тестах на устройстве заводится не всегда. Плюс мок класса это всё ещё настоящий объект: конструктор тянет свои зависимости, незаданные методы возвращают нули и пустые списки, получается полуживой гибрид, поведение которого никто не описывал.
Содержательно важнее другое. Завися от конкретного класса, код зависит от его реализации: от того, что внутри есть кэш, от порядка вызовов, от типов исключений. Интерфейс фиксирует контракт, и в тест вместо мока встаёт простая подделка, обычный класс на десять строк со списком внутри. Такой тест читается лучше цепочки заглушек, идёт быстрее и не разваливается от рефакторинга внутренностей.
И сразу оговорка про меру: интерфейс с единственной реализацией, заведённый только ради мока, это не архитектура. Иногда достаточно передать в конструктор функцию или сделать класс настолько простым, что подменять в нём нечего.
Где спотыкаются
Утверждают, что финальный класс замокать невозможно. Сегодня возможно, и собеседник это знает. Честная формулировка другая: возможно, но дороже, медленнее и с оговорками по окружению.
Второе: заводят интерфейс на каждый класс проекта. Появляется пара из интерфейса и единственной реализации, навигация по коду усложняется, а связанность остаётся прежней, потому что контракт повторяет публичные методы класса один в один.
Третье: мокают чужое, клиент сторонней библиотеки или классы фреймворка. Тест начинает проверять ваше представление о библиотеке, а не свой код, и зелёный прогон спокойно уживается с падением на устройстве. Чужое заворачивают в свой тонкий интерфейс и подменяют уже его.