В одном из моих основных наборов тестов интеграции данных я создаю и использую Fluent NHibernate SingleConnectionSessionSourceForSQLiteInMemoryTesting
, чтобы получить новый сеанс для каждого теста. После каждого теста я закрываю фабрику соединений, сеансов и сеансов и выбрасываю вложенный вложенный StructureMap контейнер, из которого они пришли. Это работает практически для любого простого теста интеграции данных, который я могу себе представить, включая тесты, использующие объект PersistenceSpecification
Fluent NHib.
Проблема начинается, когда я тестирую длительный процесс начальной загрузки базы данных приложения, который создает и сохраняет тысячи объектов домена. Дело не в том, что первая установка и демонтаж тестового набора завершается неудачей, на самом деле тестовый набор успешно загружает базу данных в памяти, поскольку приложение запускает реальную базу данных в производственной среде. Проблема возникает, когда база данных загружается во второй раз в новую базу данных в памяти с новым сеансом и фабрикой сеансов.
Ошибка:
NHibernate.StaleStateException : Unexpected row count: 0; expected: 1
row count
действительно Unexpected
, строка, которую ищет тестируемое приложение, должна находиться в сеансе. Видите ли, дело не в том, что какие-то данные из последнего интеграционного теста торчат, а в том, что по какой-то причине сессия просто перестает работать mid-database-boostrap. И я везде искал место, где мог бы придерживаться старой сессии, и я не могу ее найти.
Я искал код для static
синглтонов объектов, но нигде рядом с рассматриваемым кодом нет. У меня есть пара StructureMap InstanceScope
singleton's, но они выбрасываются с каждым вложенным контейнером, который теряется после каждого демонтажа теста.
Я испробовал все возможные варианты размещения и закрытия каждого объекта, связанного с каждым тестовым демонтажем, и он все еще не удался на этой длительной загрузке базы данных. Я даже бездельничал с current_session_context_class
безрезультатно. Но не связанные с начальной загрузкой тесты базы данных работают нормально. У меня заканчиваются варианты, и мне, возможно, придется отказаться от длительных интеграционных тестов в пользу приемочных тестов на основе WatiN.
Может кто-нибудь подсказать, как я могу понять, почему некоторые из моих SingleConnectionSessionSourceForSQLiteInMemoryTesting
не повторяются?
Советы, как сделать так, чтобы тестовый комплекс интеграции NHibernate SqlLite повторялся для больших сеансов данных?