NHibernate Mapping Sanity Проверяет - PullRequest
       16

NHibernate Mapping Sanity Проверяет

4 голосов
/ 05 августа 2011

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

Вот несколько вещей, которые я бы хотелхотел бы выполнить в этих тестах:

  1. Обнаружение столбцов, которые я не определил в своем отображении, но существует в базе данных
  2. Обнаружение столбцов, которые я сопоставил, но выполняю НЕ существует в базе данных
  3. Обнаружение сопоставленных мною столбцов, в которых типы данных между базой данных и моими бизнес-объектами больше не совпадают друг с другом
  4. Обнаружение изменений имени столбца между базой данных и моим сопоставлением

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

Ответы [ 2 ]

4 голосов
/ 05 августа 2011

Я доволен этим тестом, предложенным Ayende:

[Test]
        public void PerformSanityCheck()
        {
            foreach (var s in NHHelper.Instance.GetConfig().ClassMappings)
            {
                Console.WriteLine(" *************** " + s.MappedClass.Name);

                    NHHelper.Instance.CurrentSession.CreateQuery(string.Format("from {0} e", s.MappedClass.Name))
                        .SetFirstResult(0).SetMaxResults(50).List();

            }
        }

Я использую простой старый запрос, так как эта версия происходит из очень старого проекта, и я ленивобновить с помощью QueryOver или Linq2NH или чего-то еще ... Он в основном пропингует все настроенные сопоставленные сущности и также захватывает некоторые данные, чтобы убедиться, что все в порядке.Неважно, существует ли какое-либо поле в таблице, но не в отображении, это может вызвать проблему в постоянстве, если не обнуляется.Я знаю, что у Фабио Мауло есть что-то более точное .В качестве личного соображения, если вы думаете об улучшении, я бы попытался реализовать такую ​​стратегию: поскольку отображение доступно для просмотра через API, найдите любое явное / неявное объявление таблицы на карте и отправьте эхо-запрос с базой данных, используя стандартную схему.вспомогательные классы у вас внутри NH (они в конечном итоге используют классы схемы ADO.NET, но они изолируют все вещи конфигурации, которые мы уже сделали в самом NH). Немного поиграв со стратегией именования, мы можем получить один за другим контрольный список полей таблицы.Еще одно улучшение может быть достигнуто путем, в случае несоответствия области, поиска кандидата путем применения расстояния Левенштейна ко всем доступным именам и выбора одного, если удовлетворены некоторые пороговые реквизиты.Это, конечно, бесполезно в сценариях первого класса, когда схема БД генерируется самим NH.

0 голосов
/ 05 августа 2011
...