Как выполнить юнит-тестирование репозитория методом - PullRequest
4 голосов
/ 18 августа 2011

У меня есть этот метод для модульного тестирования:

public virtual TEntity Get(int id)
        {
            return _db.Set<TEntity>().Find(id);
        }

Может кто-нибудь сказать, пожалуйста, как провести модульное тестирование этого?

Я думаю, что мне нужно проверить, что Find isвызывается с правильным идентификатором?

Сначала я пытался смоделировать контекст _db, используя Moq.Набор не виртуальный, хотя и не может использовать Verify.

Может кто-нибудь предложить альтернативный метод тестирования этого?

Ответы [ 2 ]

9 голосов
/ 18 августа 2011

Реализация репозитория обычно полна вызовов ORM API. Здесь нет ничего для юнит теста. Вместо этого вы должны написать интеграционный тест. Используйте в базе данных памяти, как SQLite. Прочитайте это или это . Таким образом, вы охватите свои отображения, критерии, HQL и т. Д. Я знаю, что вы используете EF, но я думаю, что этот принцип тот же, что и NHibernate.

Относительно издевательства _db. Есть очень хорошее руководство: Не издевайтесь над типами, которыми вы не владеете .

0 голосов
/ 18 августа 2011

Я поместил универсальную реализацию репозитория на github, которая позволяет легко тестировать. Вы можете проверить это здесь:

https://github.com/rcravens/GenericRepository

Сама реализация репозитория проверена, и есть также поддельная (в памяти) реализация репозитория, которую можно внедрить для тестирования кода более высокого уровня.

Bob

...