Да, но не обязательно по указанным причинам.
Пример:
В моем текущем проекте мы создаем инструмент для ввода данных. У нас есть определенные функции, которые используются всеми (или почти всеми) вкладками, и мы кодируем одну страницу (проект на основе веб-интерфейса), чтобы содержать все элементы управления вводом данных.
На этой странице есть навигация и кнопки для взаимодействия со всеми общими действиями.
Определив интерфейс (IDataEntry), который реализует методы для каждой из функций, и реализовав этот интерфейс для каждого из элементов управления, мы можем использовать открытые методы aspx page для пользовательских элементов управления, которые выполняют фактический ввод данных. 1009 *
Определяя строгий набор методов взаимодействия (например, ваш метод 'cut' в примере), интерфейсы позволяют вам взять объект (будь то бизнес-объект, веб-элемент управления или что-то еще) и работать с ним определенным образом.
Например, вы можете назвать вырезание на любом объекте ICut, будь то нож, пила, паяльная лампа или монофиламентная нить.
Для тестирования я думаю, что интерфейсы тоже хороши. Если вы определяете тесты на основе ожидаемой функциональности интерфейса, вы можете определять объекты, как описано, и тестировать их. Это тест очень высокого уровня, но он по-прежнему обеспечивает функциональность. ОДНАКО, это не должно заменять модульное тестирование отдельных методов объекта ... не стоит знать, что 'obj.Cut' приводил к обрезке, если он приводил к обрезке неправильной вещи или в неправильном месте. *