2008-12-01 3 views
8

Мне кажется, что большинство людей пишут свои тесты против встроенных в базу данных, таких как SQLite при работе с NHibernate. У меня есть это и работает, но мой первый тест (который использует NHibernate) всегда занимает от 3-4 секунд до выполнения. Следующий тест проходит намного быстрее.Как эффективно делать TDD с помощью NHibernate?

Я использую FluentNhibernate для выполнения сопоставления, но получаю примерно одинаковые тайминги с файлами сопоставления XML. Для меня 3-4-секундная задержка серьезно нарушает мой поток.

Какой рекомендуемый способ работы с TDD и NHibernate?

Возможно ли издеваться над ISession для тестирования реальных запросов или это может быть сделано только в базах памяти?

+0

Это становится еще более актуальным, когда тесты проходят 3-4 минуты. – bentford 2009-02-25 23:06:20

ответ

14

Я использую шаблон репозитория для выполнения операций с базой данных, и всякий раз, когда я запускаю свои тесты, я просто запускаю тесты более высокого уровня, которые просто выполняют Mock the Repository (с RhinoMocks).

У меня есть отдельный набор тестов, который явно проверяет уровень хранилища и сопоставления NHibernate. И они обычно не меняются так же, как бизнес и логика логики над ними.

Таким образом, я получаю очень быстро UnitTests, что никогда не ударил БД, и по-прежнему хорошо испытанный DB Layer

1
+0

интересные ссылки ... спасибо – bob 2008-12-02 11:52:29

+0

Прохладные ссылки, и они действительно имеют отношение к nHibernate, но что конкретно дают ответы на вопрос? – David 2009-08-13 21:47:24

+0

В серии он использует TDD и показывает его в действии. – Webjedi 2009-08-14 14:35:28

0

Вы пытались изменить некоторые значения по умолчанию в дополнительных свойствах конфигурации? Замедление, скорее всего, связано с определенными оптимизациями nhibernate с генерацией кода.

http://nhibernate.info/doc/nh/en/index.html#configuration-optional

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

4

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

Смежные вопросы