Я бы определенно предложил интеграционные тесты против DAL, в пределах разумного.
Мы не используем шаблон Repository как таковой (к нашему огорчению), но наша политика в отношении аналогичных классов (Searchers) следующая:
- Если метод выполняет простое извлечение из базы данных с использованием вызова O / RM, не проверяйте его.
- Если метод использует функции построения запросов O / RM, протестируйте его.
- Если метод содержит строку (например, имя столбца), протестируйте ее.
- Если метод вызывает хранимую процедуру, протестируйте ее.
- Если метод содержит логику, проверьте его. Но старайтесь избегать логики.
- Если метод обходит O / RM и использует необработанный SQL, протестируйте его. Но постарайся избежать этого.
Суть в том, что вы должны знать, что ваши O / RM работают (и, надеюсь, есть тесты), поэтому нет причин проверять базовое поведение CRUD.
Вам определенно понадобится «тестовая колода» - база данных в памяти, локальная база данных с файловой поддержкой, которую можно проверить в системе контроля версий, или (если вам нужно) общая база данных. Некоторые среды тестирования предлагают средства отката для восстановления состояния базы данных; будьте осторожны, если вы используете несколько баз данных в одном тесте или (в некоторых случаях), если у вас есть встроенные транзакции.
РЕДАКТИРОВАТЬ: обратите внимание, что эти интеграционные тесты все еще будут тестировать ваш репозиторий в «изоляции» (за исключением базы данных). Все остальные ваши юнит-тесты будут использовать поддельный репозиторий.