Интеграционные тесты Spring.net + Nhibernate проходят, когда не должны

StackOverflow https://stackoverflow.com/questions/126987

Вопрос

Я использую Spring.net с NHiberante (HibernateTemplate) для реализации моего DAO.

У меня также есть несколько интеграционных тестов, которые выходят из «AbstractTransactionalDbProviderSpringContextTests».

DI работает нормально, и все тесты проходят успешно, НО иногда они проходят успешно. даже когда они не должны.

Например, если в моих файлах hbm.xml есть такая ошибка:

<class name="Confluence.Domain.User" table="THIS TABLE DOES NOT EXIST">

Тесты не пройдены, но если ошибка такая:

<many-to-many class="Confluence.Domain.User" column="THIS COLUMN DOES NOT EXIST"/>

тесты проходят молча, скрывая ошибку.

Я тестирую его с помощью SetComplete() и проверяю БД на наличие изменений, но думаю, что вся идея такого рода тестов заключается не в этом.

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

Большое спасибо!

@Бен:Если мне нужно на самом деле выполнить сценарии SQL, чтобы проверить, работают ли они, какая польза от использования таких тестов Spring?

Это было полезно?

Решение

Если у вас есть синтаксическая ошибка в вашем сопоставлении, NHibernate завершится сбоем в config.BuildSessionFactory().

Но для неправильно написанных/несуществующих объектов базы данных единственный способ узнать об этом для NHibernate — это фактически выполнить запрос...Таким образом, вы можете использовать некоторые интеграционные тесты для проверки вставки/выбора одного объекта, чтобы убедиться, что он работает.

Однако не уверен, какое это имеет отношение к Spring.NET.

Другие советы

При тестировании DAO на базе NH вам следует очистить сеанс, чтобы база данных обновлялась новой информацией, но при этом выполнялась откат, как и раньше.Как это сделать описано здесь - http://forum.springframework.net/showthread.php?t=5246 Я добавил это в справочную документацию.Надеюсь это поможет.

Ура, Марк

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top