У меня есть веб-сервис, который в основном просто выполняет некоторые хранимые процедуры, преобразует данные и отправляет их в браузер.Никакой модный картограф ORM или что-то в этом роде.Чтобы написать тест без доступа к базе данных, я сделал следующее:
- Я извлек все обращения к БД в один класс.Методы возвращают только объекты DataSet и DataTable.
- Выполнил пример вызова для каждого метода и сериализовал DataSet / DataTable на диск.
- Извлек интерфейс, предоставляющий доступ ко всем доступным методам.
- Реализован поддельный класс базы данных, который просто загружает сериализованные данные и возвращает их.
Теперь у меня есть сериализованные примеры результатов, которые я могу проверить в своем проекте, и я могу использовать поддельную базу данных в моемтесты.
Это работает довольно хорошо для меня.Есть ли какая-то структура, которая облегчает создание и загрузку данных образца?Мой текущий проект небольшой, но я бы использовал ту же схему в более крупных проектах.
Обновление:
Очевидно, что все ответы не являются неправильными, но упускают суть.Я знаком с основами модульного тестирования.Но мой код работает с DataTables, поэтому мне придется каким-то образом подделать мои DataTables.Создание DataTable с нуля - непростая задача, и это приведет к раздуванию моих тестов и снижению читабельности.В моем случае было бы совершенно невозможно сгенерировать полезные примеры данных вручную.
Поэтому я выполнил несколько примеров вызовов для образца базы данных, чтобы получить некоторые DataTables.Я сериализовал эти таблицы на диск и использую сериализованные версии для создания моих поддельных DataTables при тестировании.Таким образом, тесты не зависят от базы данных.
Существуют различные варианты того, как структурировать код, чтобы упростить десериализацию таблиц.Но это детали реализации, которые на данный момент не нуждаются в обсуждении.Моя проблема заключается в следующем:
Управление примерами вызовов и (де) сериализация таблиц - это утомительная работа.Я искал некоторые инструменты, чтобы сделать это проще.