Модульное тестирование хранилища. NHibernate - PullRequest
1 голос
/ 20 января 2012

У меня есть базовая реализация репозитория на основе NHibernate (конструктор ISessionFactory инъекция), которая хранится внутри DAL.Он реализует контракт, который хранится в `Domain Layer '.

Должен ли я тестировать реальное поведение репозитория, используя SQl CE, или я должен реорганизовать свое приложение для поддержки агностикоподобного (как в книге Тима Маккарти * 1008)* Unit of Work и затем выдать мою фальшивую реализацию IUnitOfWorkRepository?

Это правильный подход для запуска тестов в локальной базе данных, показывающий реальную реализацию репозитория?

Спасибо!

Ответы [ 3 ]

3 голосов
/ 20 января 2012

Вопрос в том, что вы тестируете и почему. Это ответит на вопрос.

Если:

Я хочу протестировать сторонний инструмент

То есть вы тестируете, работает ли NHibernate (это не тест Я делаю). Затем делайте все, что требуется, поэтому рефакторинг не требуется. Освободись.

Я хочу проверить, как мой код взаимодействует с инструментом сторонней организации

Тогда вы говорите о том, что я люблю называть тестом взаимодействия. Рефакторинг необходим, поскольку вы больше интересуетесь тем, как вы используете NHiberate, чем если бы он работал.

Я хочу проверить свой код

Абстракция NHibernate целиком. Делать что нужно ... обертку? Теперь вы вернулись к юнит-тестированию.

Я хочу протестировать свое приложение с точки зрения пользователя

Я думаю, что это выходит за рамки вашего разговора. Но вы можете использовать эту область, говоря о компонентах. Так что ... хм ... стоит, но не легко. Это не модульный тест, поэтому вы хотите создать экземпляр компонента / приложения и запустить его целиком, как его пользователь. Я называю эти «UAT» и обычно применяю как «кодированные UAT».

2 голосов
/ 20 января 2012

Модульное тестирование - это тестирование модуля в изоляции. Так что нет, это даже не модульный тест, если вы идете в базу данных. Абстрагируйтесь и протестируйте свои репозитории с макетированными интерфейсами.

1 голос
/ 20 января 2012

Я думаю, что для тестирования репозиториев вам нужно использовать реальный сценарий.В противном случае у вас нет другого места для проверки доступа к базе данных.Издеваться над репозиториями не очень хорошая практика.Потому что у вас нет никакой логики, которую нужно тестировать в репозиториях.Я думаю, что вам нужно написать интеграционные тесты, которые вызывают реальные репозитории, чтобы получить какую-либо выгоду от этого.

...