2009-12-08 2 views
3

Я преодолено по умолчанию NHibernate DefaultDeleteEventListener согласно этому источнику: http://nhibernate.info/blog/2008/09/06/soft-deletes.htmlКак проверить мягкий у слушателя удаление событий без создания NHibernate Sessions

так у меня есть

protected override void DeleteEntity(
     IEventSource session, 
     object entity, 
     EntityEntry entityEntry, 
     bool isCascadeDeleteEnabled, 
     IEntityPersister persister, 
     ISet transientEntities) 
    { 
     if (entity is ISoftDeletable) 
     { 
      var e = (ISoftDeletable)entity; 
      e.DateDeleted = DateTime.Now; 
      CascadeBeforeDelete(session, persister, entity, entityEntry, transientEntities); 
      CascadeAfterDelete(session, persister, entity, transientEntities); 
     } 
     else 
     { 
      base.DeleteEntity(session, entity, entityEntry, isCascadeDeleteEnabled, persister, transientEntities); 
     } 
    } 

Как я могу проверить только этот кусок кода без настройки сеанса NHIbernate?

+0

У меня проблема ... я зарегистрировал событие ... он хорошо работает, но не устанавливает DateDeleted ... почему? –

ответ

1

Вы можете подклассифицировать слушателя событий в своем тестовом коде и предоставить общедоступный метод с той же сигнатурой, что и DeleteEntity, которая просто вызывает защищенную базовую реализацию DeleteEntity. Откажитесь от других зависимостей, вызовите общедоступный метод в проверяемом классе и убедитесь, что установлен DateDeleted.

0

Я уверен, что вы не сможете проверить это без должным образом настроенного сеанса. Тем не менее, вы можете настроить Nhibernate для использования, например, SQLite с некоторыми фиктивными данными в ваших тестах.