我已经根据以下来源覆盖了默认的 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/