Что бы вы положили в модульное тестирование класса репозитория (уровень доступа к данным)? - PullRequest
4 голосов
/ 18 сентября 2011

Я хотел бы написать модульный тест для моего уровня доступа к данным, чтобы убедиться, что в нем все работает нормально.Вопрос в том, какие вещи я должен поставить в тесты?

DAL - это статический класс Repository, который скрывает нижележащий слой (Fluent NHibernate) и предоставляет доступ к информации через IQueryable.

Я думал о

  • операциях CRUD (создание / получение / обновление / удаление)
  • Транзакции

Есть ли что-нибудь еще?о DAL, который стоит протестировать?
Заранее спасибо за ответы!

Ответы [ 3 ]

12 голосов
/ 18 сентября 2011

Реализация репозитория проверяется с помощью интеграционных тестов, а не модульных тестов.Изолировать реализацию репозитория (mocking ORM) практически невозможно.Пожалуйста, посмотрите на этот ответ .Интеграционный тест использует реальный ORM в сочетании с реальной или поддельной (обычно в памяти) базой данных для следующих действий:

  • сохранение нового объекта
  • change -> persist -> restore sequence
  • все методы «Найти»

По сути, вы проверяете правильность:

  • отображений (даже если вы используете бегло)
  • критерии
  • hql или sql запросов

Транзакции обычно обрабатываются прикладным уровнем, а не репозиториями.Возможно, вас заинтересует этот ответ.Инкапсуляция IQueryable в реализации репозитория значительно упростит вам тестирование.

1 голос
/ 18 сентября 2011

Обычно в DAL у вас нет бизнес-логики, просто обычный код доступа к БД, длина которого, вероятно, составляет 1-5 строк, поэтому тестировать особо нечего ...

Если вы уверены,Вы хотите провести модульное тестирование, тогда я считаю, что CRUD - это хорошо.Макетируйте NHibernate, предоставляйте поддельные данные и проверяйте их, проверяйте;).

Надеюсь, это поможет;)

1 голос
/ 18 сентября 2011
  1. Необходимость проверки правильности обработки исключений
  2. Параметр времени ожидания для подключения к базе данных
  3. Параметр времени ожидания для вызова процедуры сохранения
  4. Соответствующее отображение входных параметров.Если процедура store ожидает получить float, но получит int.
...