Я начал работать над существующим проектом с более чем 1800 функциональными / интеграционными тестами. Они были закодированы с помощью MSTest.
Многие из них подключаются напрямую к базе данных SQL Server. База данных генерируется генератором кода, который, помимо прочего, создает базу данных. Генерация БД медленная и громоздкая.
Это как следующие проблемы:
- Тест очищает базу данных, что означает, что мы должны поддерживать отдельную базу данных для тестов и другую для использования приложения. Процедура прямо сейчас заключается в изменении базы данных при переключении между запуском теста и запуском приложения.
- Каждая ветвь должна иметь свой собственный дБ, поскольку модель дБ может быть разной в каждом дБ (что означает 2 дБ на ветвь с шагом 1)
- Это медленно
- Для запуска теста должна присутствовать установка SQL Server и базы данных
Мне бы хотелось, чтобы существующие тесты не зависели от таких факторов при установке, выполнялись быстрее, если это возможно, и не требовали обслуживания баз данных с помощью генератора кода, манипулирования строками соединений и т. Д.
Я пытаюсь добиться этого как можно быстрее, поскольку переписывание тестов не входит в бюджет . Я уже ввел насмешку, чтобы новый тест был менее зависим от базы данных, теперь моя проблема с существующими тестами.
Сначала я изменил наш базовый тестовый класс для подключения к базе данных SQLite, которая была бы создана генератором кода, который уже генерирует основную базу данных вместо базы данных SQL Server. SQLite может быть удален и повторно скопирован в тестовую папку между каждым запуском. Это было бы быстро, не требовало иметь 2 базы данных SQL Server, фактически, если бы только выполнялись тесты, установка SQL Server не потребовалась бы.
Мои проблемы заключались в том, что сгенерированный код использует много концепций, не включенных в SQLite; T-SQL, специфичный для SQL Server синтаксис, схемы, хранимые процедуры и встроенные сборки clr.
Затем я попробовал SQL Server CE 4, который имел многие из тех же ограничений, что и SQLite.
Существуют ли другие альтернативы, кроме переписывания кода для совместимости с SQLite (или CE), переписывания существующих тестов или системы, в которой мы поддерживаем 2 seperatedb?
РЕДАКТИРОВАТЬ: Изменен модульный тест на функциональные тесты, прояснил некоторые вещи. Положите некоторые вещи жирным шрифтом.
Я согласен, что эти тесты не являются правильными юнит-тестами. Я согласен, что насмешка была бы хороша здесь. То, что я пытаюсь сделать, это попытаться исправить беспорядок, с которым я столкнулся.