Я ищу несколько дней на нескольких форумах, блогах, MSDN и т. Д., Но пока мне не удалось найти никаких указаний по этой теме. Я попытаюсь объяснить этот пост более подробно, потому что я думаю, что информация и документация по разработке SSDT недостаточно документированы, и не существует документа с лучшими практиками, такого как проекты баз данных VS 2010 (http://vsdatabaseguide.codeplex.com/).
Я разработчик C # (без администратора базы данных), и мы находимся в начале фазы разработки проекта с нуля (10-15 разработчиков), и в настоящее время мы определяем наш процесс разработки, включая обработку разработки баз данных.
Технологии и цепочка инструментов, которые мы хотим использовать:
- EF 5 (сначала модель, возможно, мы сначала изменим это на базу данных, потому что с такими проблемами, как представления, индексы и т. Д., Намного проще справиться)
- SSDT (инструменты данных SQL Server)
- VS 2012 / TFS 2012
- MS Test для автоматизированных модульных / интеграционных тестов
Процесс разработки основан на разработке через тестирование и выглядит так:
- Каждая функция разрабатывается одним разработчиком в отдельной ветке функций.
- Разработка и реализация модульных тестов (= реализация функции)
- Если для функции требуется доступ к базе данных, разработчик должен: а) создать / обновить модель EF; б) создать базу данных localDB с помощью функции EF «Создать базу данных из модели»; в) создать / обновить проект SSDT с помощью сравнения схем; г) создать модульные тесты с методом инициализации теста, который создает новую базу данных и соответствующие тестовые данные для каждого теста
- Слить функциональную ветку обратно с интеграционной веткой
- После проверки слияния сборка CI выполняет модульные / интеграционные тесты.
Итак, есть некоторые моменты, которые я не уверен на 100% в том, как их решить (особенно обработка базы данных с помощью модульных тестов), и я был бы признателен, если бы вы могли направить меня в правильном направлении:
Как решить создание базы данных для автоматизированных модульных тестов:
a) Выполнить сценарий создания базы данных SQL (который может быть создан вручную ранее с помощью функции публикации SSDT) для каждого выполненного метода тестирования? Я бы предпочел этот вариант, потому что каждый тест имеет чистое и согласованное состояние базы данных для каждого теста. Есть ли проблема с производительностью при создании базы данных localdb для каждого теста?
б) Или использовать задачу msbuild «SQLPublish» или «sqlPackage.exe»? Я думаю, что это не вариант, потому что это будет одноразовая вещь, и я хочу создать новую тестовую базу данных для каждого модульного теста.
c) Или создать тестовую базу данных вручную и сохранить файл * .mdf в корень папки управления версиями и создать копию для каждого теста? Но это я бы не предпочел, потому что разработчик A мог переопределить файл, который мог иметь изменения от другого разработчика B, который ранее проверил свои изменения. А это значит, что разработчик
Как решить создание тестовых данных для автоматизированных модульных тестов:
a) Выполнить сценарий SQL для конкретного теста, который вставляет соответствующие тестовые данные для каждого теста. Я думаю, это также означает создание новой базы данных, как указано в пункте 1. Опять же, это мой предпочтительный вариант.
б) Или использование EF для создания тестовых данных кажется не очень чистым способом, потому что это зависит от реализации модели EF, которая на самом деле должна быть протестирована неявно с помощью функциональных модульных тестов.
c) Или используйте файлы тестовой базы данных, созданные вручную. Но это усложнило бы процесс разработки для разработчика. И это также может быть отменено другими разработчиками.
Может быть, стоит упомянуть, чего мы ожидаем от наших модульных тестов. Целью наших модульных тестов не является тестирование схемы базы данных, такой как хранимые процедуры и т. Д. Мы хотим протестировать части функций нашего приложения с помощью модульных тестов «кода», которые также можно рассматривать как интеграционные тесты.
Есть ли у кого-нибудь из вас похожий процесс разработки и каков ваш опыт? Есть ли рекомендации по улучшению нашего процесса разработки? Есть ли какие-либо ресурсы или документы о передовых методах разработки SSDT? И самый важный для меня вопрос: как вы решили автоматическое модульное тестирование, включая правильную обработку базы данных и интеграционные тесты?