У меня есть старый MonoRail / ActiveRecord, я тоже немного поработал.
Недавно я решил обновить приложение до Castle Trunk & NHibernate 2.1.0.4000 GA, и теперь я нахожу несколько проблем с запуском тестов:
Прежде всего - при использовании TestDriven.Net для запуска интеграционных тестов, которые работают с базой данных, происходит полный сбой TestDriven.Net или все тесты завершаются, затем TestDriven.Net зависает. Этого никогда не было до обновления.
Когда происходит сбой TestDriven.Net, вот что записывается в журнал событий:
Ковш неисправный 1467169527, тип 1
Название события: APPCRASH
Ответ: не доступно
Идентификатор кабины: 0
Подпись проблемы:
P1: ProcessInvocation86.exe
P2: 2,22,2468,0
P3: 4a26845c
P4: KERNELBASE.dll
P5: 6.1.7600.16385
P6: 4a5bdbdf
P7: e053534f
P8: 0000b727
P9:
P10:
Вторая вещь - исключения регистрируются, когда прокси-классы выполняются Finalize () 'd, как показано ниже - похоже, это происходит, когда это регистрируется пару раз, то есть когда происходит сбой TestDriven.Net.
Вот трассировка стека для исключения:
NHibernate.LazyInitializationException:
Initializing[MyApp.Core.Models.TestExecutionPackage#15d9eb96-faf0-4b4b-9c5c-9cd400065430]-Could not initialize proxy - no Session.
at NHibernate.Proxy.AbstractLazyInitializer.Initialize()
at NHibernate.Proxy.AbstractLazyInitializer.GetImplementation()
at NHibernate.ByteCode.Castle.LazyInitializer.Intercept(IInvocation invocation)
at Castle.DynamicProxy.AbstractInvocation.Proceed()
at Castle.Proxies.TestExecutionPackageProxy.Finalize()
Такое же поведение также приведет к сбою MsBuild на нашем CI-сервере.
Что действительно странно, так это то, что теоретически исключения, генерируемые в Finalize (), следует проглатывать согласно документам MSDN:
http://msdn.microsoft.com/en-us/library/system.object.finalize(VS.71).aspx
Если Finalize или переопределение Finalize генерирует исключение, среда выполнения игнорирует исключение, завершает метод Finalize и продолжает процесс финализации. 1033 *
Кто-нибудь мысли?