Думаю, я бы сосредоточился на двух предложениях в среднем абзаце:
Во-первых, почему методы сохранения и загрузки в классе обслуживания "действительно большие"? Не могли бы вы их разбить? Возможно, там есть небольшие устройства, которые можно протестировать отдельно. Возможно, это указывало бы на разделение службы на несколько подкомпонентов, которым ваша служба делегирует большую часть своей работы. Можно надеяться, что вы не добавите больше кода на уровень пользовательского интерфейса по этому маршруту, потому что пользовательский интерфейс все еще сможет взаимодействовать только с одной службой, но вы можете протестировать все компоненты по отдельности.
Во-вторых, почему так сложно настроить фальшивые репозитории в вашей тестовой системе? Не могли бы вы сделать это проще? Я часто использую конструктор для установки похожих, но не идентичных структур данных для использования в тестах. Затем вы получите тесты, которые читают «при обычной настройке , за исключением разницы X , проверьте, что происходит Y».
Еще одна идея состоит в том, чтобы заметить, что код доступа к данным часто является очень повторяющимся, и часто можно генерировать большую его часть автоматически на основе схемы вашей базы данных. Мы генерируем большую часть нашего базового уровня доступа к данным, включая поддельные реализации классов репозитория для тестирования. Конечно, мы должны вручную закодировать критичные для производительности биты, но это избавляет от многих трудностей и облегчает обработку изменений в схеме.