0

私は次のリポジトリインターフェースを持っています

public interface IRepository<TEntity> {

    TEntity FindById(int id);
    TEntity FindById(long id);
     etc
}

次に、上記のインターフェイスから継承する次のリポジトリクラスがあります

public class Repository<TEntity> : IRepository<TEntity> where TEntity : class {
        private DB _context;

        public Repository() {
            _context = new DB();
        }

        public Repository(DB context) {
            _context = context;
        }

        Methods.....
}

IRepository<>からも継承するFakeRepository<>を作成しました

public class FakeRepository<TEntity> : IRepository<TEntity> where TEntity : class {
        private FakeDataContext _context;

        public FakeRepository() {
            _context = new FakeDataContext();
        }

        public FakeRepository(FakeDataContext context) {
            _context = context;
        }

        Methods....
}

リポジトリと偽物の唯一の違いは、LinqToSQL DBContextを使用するのではなく、テスト目的で偽物を作成したことです。

次に、単体テストで実行できることは次のとおりです。

ObjectFactory.Initialize(x => { x.For(typeof(Repository<>)).Use(typeof(FakeRepository<>)); });

したがって、私のテストは常にメモリ内のfakedbcontextに対して実行されます。

ただし、構造マップエラー104プラグインタイプエラーが発生し、理由がわかりません。

4

2 に答える 2

1

Initialize では、IRepository を FakeRepository に対してマップする必要があります。FakeRepository に対するリポジトリではありません。次に、テストで IRepository のインスタンスを要求すると、偽のインスタンスが取得されます。

ObjectFactory.Initialize(x => { x.For(typeof(IRepository<>)).Use(typeof(FakeRepository<>)); });
于 2011-08-13T21:21:46.613 に答える
0

Dev Magic Fake を使用しない理由は、リポジトリを Fake するなどの多くの機能を備えているため、任意の型を保存して Id を使用して任意の型を取得し、メモリのシリアル化によって型を永続的に保存でき、型や多くのデータを生成することもできます。その他の機能の詳細については、次のリンクを参照してください。

http://devmagicfake.codeplex.com/

ありがとう

M.ラドワン

于 2011-09-06T11:42:00.273 に答える