0

我有以下存储库界面

public interface IRepository<TEntity> {

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

然后我有以下从上面的接口继承的 Repository 类

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

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

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

        Methods.....
}

我创建了一个 FakeRepository<>,它也继承自 IRepository<>

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

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

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

        Methods....
}

Repository 和 Fake 之间的唯一区别是,我没有使用 LinqToSQL DBContext,而是创建了一个用于测试目的的假数据库。

然后我在单元测试中能够做的是:

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

所以我的测试将始终针对内存中的 fakedbcontext 运行。

但是我得到结构映射错误 104 插件类型错误,我不知道为什么?

4

2 回答 2

1

在您的初始化中,您应该将 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/

谢谢

拉德万

于 2011-09-06T11:42:00.273 回答