I модульное тестирование моих репозиториев довольно религиозно. Наверное, это, наверное, мои самые важные модульные тесты.
Это может быть довольно безболезненно, если вы используете ORM, такой как NHibernate.
Я использую базовое устройство, которое содержит настройку и отключение для создания в памяти sqlite db, а затем уничтожает его в конце каждого теста. Это удивительно быстро. Тогда для каждого репозитория у меня есть настройка, которая вводит мои тестовые данные для моих тестов. Это очень самодостаточно и улавливает все логические проблемы в моих запросах репозитория.
Единственное, что он не улавливает, это конкретные случаи поставщика услуг, но при использовании чего-то вроде NHibernate это, как правило, исключение.
Для особых случаев, когда вы тестируете конкретные запросы к базе данных, вам может потребоваться набор тестов, в которых используется другая методология настройки и удаления. К сожалению, эти тесты будут медленнее и, вероятно, более хрупкими, чем ваши другие модульные тесты (поэтому их следует группировать вместе).
Если доступны «экспресс» выпуски программного обеспечения базы данных, которые вы тестируете, я по-прежнему рекомендую, чтобы база данных была настроена локально «на лету», чтобы вы всегда гарантировали, что база данных, на которую проходят ваши тесты, имеет схему, которую они ожидают. Однако я бы изменил одну часть настроек и разрывов этого. Я бы только установил и отменил базу данных в начале и в конце всего теста. Затем каждая установка и отключение теста должны начинать транзакцию, а затем откатывать ее в конце. Это быстрый способ держать вещи раздельными между испытаниями. Последнее, что вы хотите, - это данные одного теста, чтобы повлиять на другой тест.
Я использую Hibernate (Java), но мое приложение использует кучу родных SQL для использования нескольких инструкций Oracle, которые недоступны на других серверах. –
Я добавил некоторую информацию о том, что я делал в прошлом, когда мне нужно было используйте конкретный sb, а не только тест в памяти. Я предпочитаю не делать этого, потому что это больше работает, но все равно можно сделать это безболезненно. – mockobject