2009-12-08 2 views
3

J'ai substituée la valeur par défaut NHibernate DefaultDeleteEventListener selon cette source: http://nhibernate.info/blog/2008/09/06/soft-deletes.htmlComment tester événement suppression douce listner sans la mise en place NHibernate Sessions

j'ai donc

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); 
     } 
    } 

Comment puis-je tester que ce morceau de code, sans configurer une session NHIbernate?

+0

J'ai un problème ... j'ai enregistré l'événement ... il se déclenche bien mais ne définit pas DateDeleted ... pourquoi? –

Répondre

1

Vous pouvez sous-classer votre écouteur d'événement dans votre code de test et fournir une méthode publique avec la même signature que DeleteEntity, qui appelle simplement l'implémentation de base protégée de DeleteEntity. Moquez les autres dépendances, appelez la méthode publique dans la classe testable et vérifiez que DateDeleted a été défini.

0

Je suis à peu près certain que vous ne pourrez pas tester ceci sans une session correctement configurée. Cependant, vous pouvez configurer Nhibernate pour utiliser par exemple SQLite avec des données factices dans vos tests.

Questions connexes