Мы создаем фреймворк, который будет использоваться другими разработчиками, и на данный момент мы используем много методов TDD. У нас везде есть интерфейсы, и у нас есть хорошо написанные модульные тесты, которые имитируют эти интерфейсы.
Однако сейчас мы достигли точки, когда некоторые свойства / методы входных классов должны быть внутренними и невидимыми для наших пользователей инфраструктуры (например, идентификатор объекта). Проблема в том, что мы не можем поместить эти поля / методы в интерфейс, так как интерфейс не описывает доступность.
Мы могли бы:
- В первой строке метода все еще используются интерфейсы и upcast, но, похоже, это противоречит назначению интерфейсов.
- Использование классов в качестве входных параметров - нарушение правила TDD о том, что все должно быть интерфейсами
- Предоставляет другой уровень, который выполняет некоторый перевод между общедоступными интерфейсами и внутренними интерфейсами
Существует ли существующий шаблон / подход для решения этой проблемы? Что, по словам людей TDD, следует сделать?