Я тестирую свои хранилища довольно религиозно. Это, наверное, мои самые важные юнит-тесты.
Это может быть довольно безболезненно, если вы используете ORM, например, NHibernate.
Я использую базовый прибор, который содержит настройки и демонтаж, для создания в памяти sqlite db, а затем уничтожения его в конце каждого теста. Это на удивление быстро. Затем для каждого репозитория у меня есть настройка, которая вводит мои тестовые данные для моих тестов. Это очень автономно и улавливает все логические проблемы в моих запросах к репозиторию.
Единственное, что он не улавливает, это специфичные для db-провайдера случаи, но при использовании чего-то вроде NHibernate обычно это исключение.
В особых случаях, когда вы тестируете запросы к базе данных, вам может потребоваться набор тестов, использующих другую методологию настройки и разборки. К сожалению, эти тесты будут медленнее и, вероятно, более хрупкими, чем другие ваши юнит-тесты (поэтому их следует сгруппировать вместе).
Если доступны «экспрессные» выпуски программного обеспечения базы данных, которое вы тестируете, я все же рекомендую, чтобы база данных была настроена локально на лету, чтобы вы всегда гарантировали, что база данных, с которой работают ваши тесты, имеет ожидаемую схему. Я хотел бы изменить одну часть настройки и снятия этого, хотя. Я бы настроил и разобрал базу только в начале и в конце всего цикла испытаний. Затем каждый тестовый набор и демонтаж должен начинать транзакцию, а затем откатываться в конце. Это быстрый способ сохранить разделение между тестами. Последнее, что вам нужно, это чтобы данные одного теста влияли на другой тест.