Когда я запускаю тесты с использованием базы данных, я обычно использую базу данных SQLite в памяти.Использование БД в памяти обычно ускоряет тестирование.Кроме того, его легко обслуживать, потому что база данных «исчезла» после закрытия подключения к ней.
В тестовой настройке я установил соединение db и создал схему базы данных.В тесте я вставляю данные, необходимые для теста.(ваш вариант a)) В тестовом демонтаже я закрываю соединение с БД.
Я успешно использовал этот подход для своих приложений NHibernate ( howto 1 | howto 2 +хорошее резюме ), но я не очень знаком с Linq2SQL.
Некоторые указатели по запуску SQLite и Linq2SQL находятся на SO ( ссылка 1 | ссылка 2 ).
Некоторые люди утверждают, что тест с использованием базы данных не является тестом unit .Несмотря на это, я считаю, что существуют ситуации, когда вам нужно автоматическое тестирование с использованием базы данных:
- У вас может быть архитектура / дизайн, в котором базу данных сложно смоделировать, например, при использовании шаблона ActiveRecordили когда вы используете Linq2SQL (хотя в одном из комментариев к ответу Питера есть интересное решение)
- Вы хотите запустить интеграционные тесты с полной системой приложений и базы данных