unit-testing - 如何在不设置 NHibernate session 的情况下测试软删除事件监听器

标签 unit-testing nhibernate moq soft-delete

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

最佳答案

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

关于unit-testing - 如何在不设置 NHibernate session 的情况下测试软删除事件监听器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1867106/

相关文章:

unit-testing - 为 SOAP 服务编写 JUnit 测试的最佳方式

c# - .net 中的测试驱动开发和单元测试

c# - 使用 C++ 和 C# 的 Visual Studio 2017 单元测试以及未发现的 C++ 测试

c# - 类型或命名空间名称 'ISet' 不存在

c# - 如何模拟 SerialDataReceivedEventArgs

html - Polymer 2.x 单元测试将可选内容传递给 fixture 以绑定(bind)到目标属性

nhibernate - DB2 Fluent NHibernate 在 HasMany 映射中映射重复记录

c# - 使用 List<int> 作为参数模拟一个方法,并使用 Moq 返回 List<>

unit-testing - 在单元测试中,您是否验证和断言?

c# - NHibernate ICriteria 返回空结果