Я разделю ваш вопрос на несколько подвопросов, потому что на них трудно ответить вместе.
Модульное тестирование x Интеграционное тестирование
Когда вы пишете модульный тест, вытестируем простое устройство.Это означает, что вы тестируете один путь выполнения в тестируемом методе.Вы должны избегать тестирования его зависимостей, таких как упомянутая база данных.Обычно вы пишете простой модульный тест для каждого пути выполнения, чтобы обеспечить хорошее покрытие кода вашими тестами.
Когда вы пишете интеграционный тест, вы тестируете все слои, чтобы увидеть, работают ли интеграция и конфигурация.Обычно вы не пишете интеграционный тест для каждого пути выполнения, поскольку существует множество комбинаций на всех уровнях.
Тестирование бизнес-классов - модульное тестирование
Вам необходимо протестироватьВаши бизнес-классы без зависимости от DAL и DB.Для этого вы должны спроектировать свой класс BL таким образом, чтобы эти зависимости вводились извне.Сначала вам нужно определить абстрактный класс или интерфейс для DAL и передать этот интерфейс DAL в качестве параметра конструктору (другой способ - открыть свойство setable в классе BL).При тестировании класса BL вы будете использовать другую реализацию интерфейса DAL, которая не зависит от БД.Есть хорошо известные тестовые шаблоны Mock, Stub и Fake, которые определяют, как создавать и использовать эти фиктивные реализации.Mocking также поддерживается многими средами тестирования.
Тестирование уровня доступа к данным - интеграционное тестирование
Вам необходимо проверить DAL на реальных БД.Вы подготовите тестовую БД с тестовым набором данных и напишите свои тесты для работы с этими данными.Каждый тест будет выполняться в своей собственной транзакции, которая будет отменена в конце, чтобы не изменять исходный набор данных.
С уважением, Ладислав