У меня есть старый 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 и продолжает процесс финализации.
Кто-нибудь думает?
Finalize
... в первую очередь - person Krzysztof Kozmic   schedule 03.08.2010