3

我已经根据此来源覆盖了默认的 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 会话的情况下仅测试这段代码?

4

2 回答 2

1

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

于 2010-07-28T10:41:48.357 回答
0

我相当肯定如果没有正确配置的会话,您将无法对此进行测试。但是,您可以将 Nhibernate 配置为在测试中使用带有一些虚拟数据的 SQLite。

于 2010-06-08T08:48:30.900 回答