To test the listeners themselves, simply new them and call the method in the interface. The NH event classes are straightforward, see their sourcecode.
To test that the listeners are included, see the tests in AR. -Markus 2009/8/6 jsmorris <[email protected]> > > Zdeslav, thanks for the suggestion, but I think my testing framework > was not set up properly. I tried my experiment on my working > application and it produced the old and new states. I am going to > have to examine my testing framework to see what is missing to enable > unit testing my event listeners. > > Anybody have a good example of testing nhibernate event listeners? > > Jason > > On Wed, Aug 5, 2009 at 1:11 PM, Zdeslav > Vojkovic<[email protected]> wrote: > > Have you tried calling SaveCopy instead of Save? > > > > On Wed, Aug 5, 2009 at 2:03 AM, jsmorris <[email protected]> wrote: > >> > >> I am attempting to use NHibernate Events to audit my ActiveRecord > >> objects for changes. My attempts have always resulted in the OldState > >> on the PreUpdateEvent object is null. Thus, I cannot check if the > >> State has changed. In the below code, in the FindDirty method, > >> @event.OldState is null. > >> > >> Searching the net has helped me construct my sample code, but others > >> have mentioned this null oldstate problem as well. The answers to fix > >> the problem have generally referred to NHibernate based solutions (and > >> I am not sure I understand them), but was wondering if anyone has > >> ideas how to fix this using ActiveRecord. > >> > >> Thanks, > >> Jason > >> > >> My current sample code > >> > >> [TestFixture] > >> public class SampleEventListenerTestFixture : > DomainTestFixture<Sample> > >> { > >> [Test] > >> public void Update() > >> { > >> var sample = new Sample() { Name = "OldName" }; > >> > >> sample.Save(); > >> > >> sample.Name = "New Name"; > >> > >> sample.Save(); > >> } > >> } > >> > >> [EventListener] > >> public class SampleEventListener : IPreUpdateEventListener, > >> IPostUpdateEventListener > >> { > >> public void OnPostUpdate(PostUpdateEvent @event) > >> { > >> var entity = @event.Entity as Sample; > >> > >> if (entity == null) > >> return; > >> } > >> > >> public Boolean OnPreUpdate(PreUpdateEvent @event) > >> { > >> FindDirty(@event); > >> > >> return false; > >> } > >> > >> private static void FindDirty(PreUpdateEvent @event) > >> { > >> var dirtyFieldIndexes = > >> @event.Persister.FindDirty(@event.State, @event.OldState, > >> @event.Entity, @event.Session); > >> > >> foreach (var dirtyFieldIndex in dirtyFieldIndexes) > >> { > >> var oldValue = @event.OldState[dirtyFieldIndex]; > >> var newValue = @event.State[dirtyFieldIndex]; > >> > >> // Log values to new "AuditLog" object and save > >> appropriately. > >> } > >> } > >> } > >> > >> [ActiveRecord] > >> public class Sample : DomainObject<Sample> > >> { > >> [Castle.ActiveRecord.Property] > >> public String Name { get; set; } > >> } > >> > >> > > > > > > > > > > > > > --~--~---------~--~----~------------~-------~--~----~ You received this message because you are subscribed to the Google Groups "Castle Project Users" group. To post to this group, send email to [email protected] To unsubscribe from this group, send email to [email protected] For more options, visit this group at http://groups.google.com/group/castle-project-users?hl=en -~----------~----~----~----~------~----~------~--~---
