实体框架的集成测试,以确保关联是正确的

本文关键字:关联 确保 框架 集成测试 实体 | 更新日期: 2023-09-27 18:08:19

我猜这更像是一个集成测试,但是有没有人有一个关于如何测试以确保实体框架(4)模型中的关联按预期工作的良好教程的链接?

我的想法是使用像sqlite这样的东西,因为我想确保我可以保存一个实体,添加一个子实体并保存它等等

实体框架的集成测试,以确保关联是正确的

如果您先使用代码,您可以使用mock框架来测试您的实现。

对于您可以在那里使用的IDbSet实例,下面是有用的:

public class InMemoryDbSet<T> : IDbSet<T> where T : class
{      
    private readonly HashSet<T> _data;
    private readonly IQueryable _query;
    public Type ElementType
    {
        get
        {
            return this._query.ElementType;
        }
    }
    public Expression Expression
    {
        get
        {
            return this._query.Expression;
        }
    }
    public IQueryProvider Provider
    {
        get
        {
            return this._query.Provider;
        }
    }
    public InMemoryDbSet()
    {
        this._data = new HashSet<T>();
        this._query = _data.AsQueryable();
    }

    public T Add(T entity)
    {
        this._data.Add(entity);
        return entity;
    }

    public T Attach(T entity)
    {
        this._data.Add(entity);
        return entity;
    }

    public TDerivedEntity Create<TDerivedEntity>() where TDerivedEntity : class, T
    {
        throw new NotImplementedException();
    }
    public T Create()
    {
        return Activator.CreateInstance<T>();
    }
    public virtual T Find(params Object[] keyValues)
    {
        throw new NotImplementedException("Derive from FakeDbSet and override Find");
    }

    public System.Collections.ObjectModel.ObservableCollection<T> Local
    {
        get
        {
            return new System.Collections.ObjectModel.ObservableCollection<T>(_data);
        }
    }

    public T Remove(T entity)
    {
        this._data.Remove(entity);
        return entity;
    }

    public IEnumerator<T> GetEnumerator()
    {
        return this._data.GetEnumerator();
    }
    IEnumerator IEnumerable.GetEnumerator()
    {
        return this._data.GetEnumerator();
    }
}

使用这种方法应该使您能够完全在内存中运行测试,而不需要访问数据库,但是,正如我所说,仅在代码中首先,因为据我所知,IDbContext仅在那里使用。