RepositoryパターンでDBに接続せずににEntity Framework (Linq to Entity)によるデータの取得をテストする。

下記のRepositoryBaseから派生してRepositoryクラスを作成
_tableプロパティからLinqをかけば、
通常はLinq to Entityでクエリ構築、検索が行われ
SetTableData()に普通の配列などを渡せば、Linq to Objectで検索が行われるので
データベースに入ってる想定のデータを渡しててやれば、
実際にはデータベースに接続せずにRepositoryのテストを行うことが出来る。
また、DBに入っている値を入力としてテストが出来るので
Repositoryの検索関数をMockにして、検索関数が返す値を入力として扱う場合より広範囲を保護することが出来る。

    public class RepositoryBase<TContext,TEntity>
        where TContext:DbContext,new()
        where TEntity : class
    {
        DbContext context;

        protected IEnumerable<TEntity> _tabledata;
        protected IQueryable<TEntity> _table { get { return _tabledata.AsQueryable(); } }
        protected IDbSet<TEntity> _dbset { get { return _tabledata as IDbSet<TEntity>; } }

        public void SetTableData(IEnumerable<TEntity> data)
        {
            _tabledata = data;
        }

        protected RepositoryBase()
        {
            context = new TContext();
            SetTableData(context.Set<TEntity>());
        
        }
    }
広告

akatukisiden について

フリーランスプログラマ 使用言語はC++,C#とそのつなぎのC++/CLI 専門はクライアントアプリ開発
カテゴリー: ユニットテスト, C#, C#-その他 タグ: , , , , , パーマリンク

コメントを残す

以下に詳細を記入するか、アイコンをクリックしてログインしてください。

WordPress.com ロゴ

WordPress.com アカウントを使ってコメントしています。 ログアウト / 変更 )

Twitter 画像

Twitter アカウントを使ってコメントしています。 ログアウト / 変更 )

Facebook の写真

Facebook アカウントを使ってコメントしています。 ログアウト / 変更 )

Google+ フォト

Google+ アカウントを使ってコメントしています。 ログアウト / 変更 )

%s と連携中