Интеграционные тесты Spring.net + Nhibernate проходят, когда не должны
-
02-07-2019 - |
Вопрос
Я использую 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 Я добавил это в справочную документацию.Надеюсь это поможет.
Ура, Марк