Заглушка / имитация базы данных в .Net

У меня есть веб-сервис, который в основном просто выполняет некоторые хранимые процедуры, преобразует данные и отправляет их в браузер. Никаких причудливых ORM-картографов или чего-то подобного. Чтобы иметь возможность писать тест без доступа к базе данных, я сделал следующее:

  • Я собрал все обращения к БД в один класс. Методы возвращают только объекты DataSet и DataTable.
  • Выполнен пример вызова для каждого метода и сериализован DataSet / DataTable на диск.
  • Извлечен интерфейс, раскрывающий все доступные методы.
  • Реализован поддельный класс базы данных, который просто загружает сериализованные данные и возвращает их.

Теперь у меня есть сериализованные образцы результатов, которые я могу проверить в своем проекте, и я могу использовать фальшивую базу данных в своих тестах.

Это хорошо работает для меня. Есть ли какая-то структура, которая упрощает создание и загрузку образцов данных? Мой текущий проект невелик, но я бы использовал ту же схему в более крупных проектах.

Обновление:

Очевидно, что все ответы не ошибочны, но упускают суть. Я' м знаком с основами модульного тестирования. Но мой код работает с DataTables, поэтому мне придется как-то подделать свои DataTables. Создание DataTable с нуля - непростая задача, и это приведет к раздуванию моих тестов и ухудшит читаемость. В моем случае было бы совершенно невозможно сгенерировать полезные образцы данных вручную.

Поэтому я выполнил несколько примеров вызовов к образцу базы данных, чтобы получить некоторые таблицы данных. Я сериализовал эти таблицы на диск и использую сериализованные версии для создания своих поддельных таблиц данных при тестировании. Таким образом, тесты не зависят от базы данных.

Существуют различные варианты того, как структурировать код, чтобы упростить десериализацию таблиц. Но это детали реализации, которые на данном этапе не нуждаются в обсуждении. Моя проблема в следующем:

Управление вызовами примеров и (де) сериализация таблиц - утомительная работа. Я искал инструменты, чтобы упростить эту задачу.

33
задан Ryan Gates 27 February 2013 в 19:41
поделиться