Хорошая идея - автоматически стереть базу данных тестов, а затем заполнить ее данными об использовании тестовых данных, которые, как предполагается, будут там для всех тестов, которые необходимо подключить к базе данных. База данных должна быть перезагружена перед каждым тестом для надлежащей изоляции - неудачный тест, который вводит неверные данные, может вызвать ложные сбои в последующих тестах, и это становится грязным, если вам нужно запустить тесты в определенном порядке для согласованных результатов.
Вы можете очистить и заполнить базу данных с помощью инструментов ( DBUnit , DBUnit.NET , другие) или просто создать свои собственные служебные классы для того же.
Как вы сказали, другие уровни должны быть в достаточной степени отделены от классов, которые фактически попадают в базу данных, поэтому необходимость участия любой базы данных в тестировании ограничена тестами, запускающими небольшое подмножество вашей кодовой базы. Ваши компоненты доступа к базе данных могут быть смоделированы / заглушки для всего, что от них зависит.