如何模拟 - _context.Entry(myEntity).Property(e => e.myProperty)。IsModified

3
我开始使用 Moq,目前为止,我认为我已经想出了如何将接口抽象到另一层以支持模拟 DbContext。现在我的代码正在运行,我遇到了这一行:
_context.Entry(updated).Property(e => e.Position).IsModified = false;

现在输入为空,所以我得到了一个错误。如何让 Moq 开心?

这是我的大部分 IDataContext 代码:

public interface IDataContext
{
    IDbSet<Content> Contents { get; set; }
    IDbSet<FieldGroup> FieldGroups { get; set; }

    #region DbContext public properties

    DbChangeTracker ChangeTracker { get; }
    DbContextConfiguration Configuration { get; }
    Database Database { get; }

    #endregion

    #region DbContext public methods

    IEnumerable<DbEntityValidationResult> GetValidationErrors();
    DbEntityEntry Entry(object entity);
    DbEntityEntry<TEntity> Entry<TEntity>(TEntity entity) where TEntity : class;
    DbSet<TEntity> Set<TEntity>() where TEntity : class;
    DbSet Set(Type entityType);
    int SaveChanges();
    Task<int> SaveChangesAsync();

    #endregion

    #region State

    bool IsState(object entity, EntityState state);
    void SetState(object entity, EntityState state);

    #endregion
}

为了处理对象上的状态设置,我将以下内容抽象成了我的DataContext中的方法。
public bool IsState(object entity, EntityState state)
{
    return this.Entry(entity).State == state;
}


public void SetState(object entity, EntityState state)
{
    this.Entry(entity).State = state;
}

但我不确定如何应对属性问题。

非常感谢任何帮助。

1个回答

0

一旦您开始需要测试Entity Framework的内部细节,例如ChangeTracker和entries state,您最好使用一个内存表示来进行测试,例如Effort


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接