Возможно, это не полный ответ на ваш вопрос, но я постараюсь пройти часть пути туда.
Интерфейс - в данном случае IDinnerRepository - должен рассматриваться как контракт . Это означает, что любая реализация должна выполнить этот контракт. Если метод FindAllDinners (), то это в основном то, что он должен делать. Поддельный репозиторий, используемый для модульных тестов, обычно может быть НАМНОГО проще, чем реальная вещь (например, с использованием словаря), поэтому не следует воспринимать реальную реализацию как проблему, скорее, рассматривайте это как требование.
Причиной существования поддельного хранилища является тестирование. В основном, все, что может быть проверено, должно быть проверено. А изъятие базы данных из уравнения - это точка ложного хранилища в памяти. Доступ к данным не является целью теста, поэтому мы заменим его. Поддельный репозиторий намного быстрее настраивается и используется, и мы можем легко убедиться, что репозиторий находится в состоянии, необходимом для прохождения тестируемого кода.
Итак, вы должны передать модели копию вашего поддельного репозитория в модульных тестах и убедиться, что все, что происходит в коде модели, отражено в поддельном репозитории.
Думаю, вы обнаружите, что на практике синхронизировать репозитории не составит труда. Если требования изменятся, вы измените интерфейс, и обе реализации должны будут измениться. Если намерения изменятся, вы, вероятно, дойдете до того момента, когда ваши модульные тесты начнут ломаться.
Надеюсь, это поможет!