Я пишу хранилище. Получение объектов осуществляется через DAO. Создание и обновление объектов выполняется с помощью объекта Request, который передается объекту RequestHandler (а-ля Шаблон команды). Я не писал DAO, Request или RequestHandler, поэтому я не могу их изменять.
Пытаюсь написать тест для этого репозитория. Я издевался над DAO и RequestHandler. Моя цель - заставить поддельный RequestHandler просто добавить новый или обновленный объект в поддельный DAO. Это создаст иллюзию, что я говорю с БД. Таким образом, мне не нужно имитировать репозиторий для всех классов, которые вызывают этот репозиторий.
Проблема в том, что объект Request - это скопление строковых блобов и различных буквенно-цифровых кодов. Я почти уверен, что XML тоже задействован. Это какой-то беспорядок. Другой разработчик пишет код для создания объекта Request на основе хранимых объектов. А поскольку RequestHandler принимает запросы, а не объект, который я храню, он не может обновлять имитируемый DAO.
Возникает вопрос: нужно ли мне издеваться над запросом или подождать, пока другой парень, который работает медленно, завершит свой код, прежде чем я напишу тест? Или прикрутить и поиздеваться над всем репозиторием при тестировании классов, вызывающих репозиторий?
Кстати, я говорю «имитировать» не в смысле NMock, а скорее как подделку БД с помощью коллекции в памяти.





Чтобы протестировать репозиторий, я бы посоветовал вам использовать тестовые двойники для всех объектов нижнего уровня.
Чтобы протестировать классы, зависящие от репозитория, я бы посоветовал вам использовать тестовые двойники для репозитория.
В обоих случаях я имею в виду тестовые двойники, созданные какой-то имитирующей библиотекой (фейки, где это работает для теста, заглушки, где вам нужно что-то вернуть тестируемому объекту, и издеваются, если вам действительно нужно).
Если вы создаете реализацию DAO с использованием коллекций в памяти для функциональной замены базы данных в демонстрационной или тестовой системе, которая отличается от модульного тестирования верхних уровней. Я сделал нечто подобное, чтобы я мог давать прототипы людям и концентрироваться на бизнес-объектах, а не на физической модели. Однако это не для модульного тестирования.
Возможно, вы не создаете веб-приложение, но вы можете взглянуть на приложение NerdDinner, которое использует репозиторий. Это бесплатный PDF-файл, в котором объясняется, как создать приложение с использованием ASP.NET MVC, и его можно найти здесь: Профессиональный ASP.NET MVC 2.0