Я буду описывать то, что я делаю здесь, но не предполагаю, что это правильный способ сделать это - просто описываю свой опыт:
Я использую NUnit, чтобы написать все мои модульные тесты для моего уровня доступа к данным с использованием SQLite db, чтобы «высмеять» базу данных. Таким образом, все вызовы базы данных реальны, но db находится в памяти, поэтому вы можете достичь хорошей производительности при выполнении своих тестов. Каждый метод доступа к данным должен быть тщательно протестирован здесь.
Мои бизнес-функции снова тестируются с использованием NUnit, но с использованием Moq, чтобы высмеять все операции доступа к данным. Если вы кешируете что-либо в своем бизнес-уровне (например, я это делаю), вы можете ввести класс кэша в памяти вместо своего реального, чтобы убедиться, что материал правильно помещен в кеш.
Несмотря на то, что многим нравится делать это для своих контроллеров, я предпочитаю использовать инструмент тестирования интерфейса, такой как Selenium, для «записи» моих модульных тестов и последующего преобразования их в код. Selenium - отличный инструмент для тестирования функциональности реального мира, а не только определенного случая в изоляции для остальных. Вы можете использовать соответствующий плагин Firefox для записи всех основных функций в вашей системе и спланировать свои утверждения (например, нажмите кнопку «A», чтобы перейти на страницу B, где я могу увидеть сообщение «Спасибо»). Selenium - отличный инструмент для запуска автоматических интерфейсных модульных тестов. Вы можете либо преобразовать свои тесты в код C#, и запустить их через свой инструмент непрерывной интеграции по своему выбору во время ваших ночных сборок (я использую TeamCity и отлично работает), или, альтернативно, в зависимости от размера вашего приложения, есть несколько веб-приложений, которые принимают ваши селеновые скрипты в качестве входных данных и запускайте их полуавтоматически.
Просто уточнить: хорошо иметь все эти тесты выше (доступ к данным, бизнес-уровень, интерфейсные тесты), так как NUnit тестирует и настраивает простой инструмент CI для запуска их каждую ночь. Таким образом, вы знаете, что что-то нарушает момент, когда вы совершаете какой-либо код или каждое утро, которое вы получаете в офисе.
Жаль, что это не тот пример, который вы искали, но я думал, что это может вам помочь.