Даже не могу представить себе ситуацию где это может пригодиться
Я тебе расскажу. Когда дизайн приложения плохой, а тестировать надо. Условно, у тебя должен быть класс, который имеет публичные интерфейсы, ты их тестируешь и проверяешь, что эти методы тебе возвращают, что должны. И плевать на остальные внутренности этого класса, пока работает. Тогда классические ассерты помогут.
А бывает, что метод этого класса какую-то логику делает, а потом не возвращает тебе результат, а вызывает ещё какой-то более глубокий метод уже у другого класса. Делегирование в плохом смысле этого слова. И тогда ты можешь только замокать ту финальную функцию и проверить, что она вызывается с теми параметрами, которые ты считаешь верным результатом работы логики тестируемого объекта.