Модульное тестирование с сгенерированным кодом DAL

StackOverflow https://stackoverflow.com/questions/802113

Вопрос

Я использую генератор кода (CodeSmith с шаблоном .NetTiers) для генерации всего кода DAL.Я пишу модульные тесты для своего кода (бизнес-уровень), и выполнение этих тестов становится довольно медленным.Проблема в том, что для каждого теста я сбрасываю базу данных в чистое состояние.Кроме того, поскольку я провожу множество тестов, кажется, что задержка операций с базой данных в сумме составляет довольно небольшую задержку.

Все операции с базой данных выполняются с помощью DataRepository класс, который генерируется с помощью .NetTiers.Знаете ли вы, есть ли способ сгенерировать (или закодировать самому) макет DataRepository, который использовал бы хранилище в памяти вместо использования базы данных?

Таким образом, я смог бы использовать этот макет репозитория в своих модульных тестах, значительно ускоряя их, фактически ничего не меняя в моем текущем коде!

Это было полезно?

Решение

Взгляните на внедрение зависимостей (DI) и инверсию управляющих контейнеров (IOC).По сути, вы создадите интерфейс, который может реализовать новый объект mock DB, а затем платформа DI будет внедрять вашу mock DB при запуске тестов и реальную DB при запуске вашего приложения.

Существует множество бесплатных библиотек с открытым исходным кодом, которые вы могли бы использовать, чтобы помочь себе в этом.Поскольку вы работаете на C #, одной из новых и перспективных библиотек DI является Девятый объект.Есть и много других тоже.Посмотри на это Статья в Википедии для других и высокоуровневое описание.

Другие советы

Исходя из описания проблемы, я думаю, что вы выполняете интеграционный тест, потому что в вашем тесте используются бизнес, DAL и оперативная база данных.

При модульном тестировании вы имеете дело с одним слоем кода, а все остальные зависимости либо подделаны, либо заглушены.При таком подходе модульные тесты будут действительно быстро выполняться при каждом инкрементном изменении кода.

Существуют различные фреймворки для создания макетов, которые вы можете использовать, такие как Rhino Mock, Moq, typemock и многие другие.(В моем проекте я использую Rhino mock для изолированного моделирования уровня DAL и бизнес-уровня модульного тестирования)

Харша

Некоторые из наших модульных тестов используют данные, извлеченные из XML, которые были сгенерированы из базы данных, для имитации доступа к БД.Классы DAL заменяются фиктивными, поскольку все они хранятся в контейнере DI.

Генерация xml-файлов является пользовательским кодом, если вы найдете для этого решение с открытым исходным кодом, я буду рад это услышать.

Редактировать после ответа Стефана:Я помню, как другая команда использовала SQL CE для их тестовой базы данных

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top