代码之家  ›  专栏  ›  技术社区  ›  isuruceanu

如何在不设置nhibernate会话的情况下测试软删除事件列表器

  •  3
  • isuruceanu  · 技术社区  · 15 年前

    我已根据此源重写默认nHibernate DefaultDeleteEventListener: http://nhibernate.info/blog/2008/09/06/soft-deletes.html

    所以我有

     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会话?

    2 回复  |  直到 10 年前
        1
  •  1
  •   mattk    15 年前

    您可以在测试代码中对事件侦听器进行子类化,并提供一个与DeleteEntity具有相同签名的公共方法,该方法只调用DeleteEntity的受保护的基本实现。 模拟其他依赖项,调用可测试类中的公共方法,并验证是否已设置了dateDelected。

        2
  •  0
  •   UpTheCreek    15 年前

    我敢肯定,如果没有正确配置的会话,您将无法对此进行测试。但是,可以将nhibernate配置为在测试中与一些虚拟数据一起使用,例如sqlite。