Я думаю, что вы, вероятно, захотите провести некоторое интеграционное тестирование, чтобы проверить логику, которая обеспечивается вашей структурой базы данных, например, ограничения, триггеры, столбцы автоинкремента и т. Д. Однако для модульного тестирования вы должны макетировать любые компоненты инфраструктуры. что ваш DAL полагается так, как вы хотите (в своих модульных тестах) тестировать только те компоненты, которые вы кодировали. Вам не нужно тестировать методы на SqlCommand или SqlConnection (например). Вы должны предположить, что используемые вами компоненты инфраструктуры работают и создают для них заглушки или макеты, которые возвращают известные данные (хорошие, плохие, исключения) в ваши методы, чтобы убедиться, что ваши методы работают правильно. Без насмешек вы несете ответственность за создание данных в базе данных и обеспечение их правильности. Вы также оставляете открытыми зависимости от сети, самой базы данных и т. Д., Что может сделать ваши тесты хрупкими.
Кроме того, модульное тестирование не устраняет необходимость в других типах тестирования. Интеграционные тесты и приемочные тесты все еще действительны и должны быть сделаны. Они, вероятно, не должны выполняться с той же частотой, что и модульные тесты, и, возможно, не должны быть настолько обширными, насколько качество вашего кода улучшается с помощью модульного тестирования, но модульное тестирование - это не волшебная пуля.