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