1

これは統合テストのようなものだと思いますが、エンティティ フレームワーク (4) モデルの関連付けが期待どおりに機能していることを確認するためのテスト方法に関する優れたチュートリアルへのリンクを持っている人はいますか?

エンティティを保存し、子エンティティを追加してそれを永続化できることを確認したいので、これにはsqlliteのようなものを使用することを考えました.

4

1 に答える 1

0

最初にコードを使用している場合は、モック フレームワークを使用して実装をテストできます。

そこで使用できる 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 はそこでのみ使用されるため、最初にコードでのみ実行できます。

于 2013-04-09T13:37:11.623 に答える