Практически невозможно провести постоянство данных в модульном тесте, поэтому я обычно делаю это на уровне интеграции.
Что касается базы данных, в моем текущем проекте костюм интеграционного теста действительно отбрасывает всю схему и воссоздает все с нуля (это используется, когда тесты запускаются с сервера сборки). Тем не менее, вы также можете запускать тесты для уже созданной базы данных - это имеет смысл, если вы тестируете / отлаживаете со своей машины и не хотите тратить время или терять тестовые данные. Вы ДОЛЖНЫ поддерживать свои скрипты базы данных (они должны быть такими же, как и для производственных) - таким образом вы тестируете свои скрипты, а также ваш .Net код. В общем случае сценарии не создают никаких данных (возможно, кроме статических данных) - они должны быть частью тестов для создания тестовых данных, выполнения некоторых операций над ними и проверки ожиданий - чтобы вы могли выполнять свои тесты для каждой базы данных с правильная схема. При создании тестовых данных мы обычно берем случайные идентификаторы и уникальные поля и жестко кодируем все остальное.
Что касается управления средой, у вас уже должен быть какой-то механизм для настройки соединения с базой данных (чтобы вы могли иметь тестовую и производственную среды) - есть много способов сделать это, включая продукты Microsoft и собственные решения - так вы должны использовать тот же способ для настройки вашей машины сборки.