Тестирование вашей функциональности менее чем идеально, убедившись, что ваш код вызывает процедуры своих зависимостей определенным образом.Ваш тест теперь привязан к реализации вашего метода вместо ожидаемого поведения.
Я бы рекомендовал начать с вопроса: какое поведение я пытаюсь проверить?Поведение - это набор предварительных условий, действие, которое вы хотите вызвать (т. Е. Вызов метода), и набор условий после публикации, которые вы хотите проверить.Например, если вы хотите проверить, что помещение элемента в стек увеличивает его счет на единицу, вы бы написали тест с именем:
public void Push_OnAnyStack_IncreasesCountByOne()
В целом, вы можете назвать свои тесты следующим шаблоном:
public void MethodToCall_WithGivenStateAndInputs_PerformsExpectedResult
Я согласен с вами, что введение интерфейсов ради интерфейсов может быть слишком трудоемким.Поэтому вы должны взглянуть на структуру своего кода и посмотреть, есть ли способ проверить поведение, которое вы хотите протестировать, установив предварительные условия (организовав свой тест), действуя путем вызова определенного метода и утверждения на постусловиях, запрашивая состояниеобъект, который вы тестируете.Таким образом, вы меньше заботитесь о том, как реализован ваш метод, и больше беспокоитесь о его поведении.Если вы обнаружите, что это невозможно, это свидетельствует о том, что вам необходимо провести реструктуризацию вашего проекта, чтобы прояснить обязанности.Это также может указывать на то, что интерфейсы на самом деле являются правильным решением.