Инициализируйте FakeRepository <> вместо Repository <>, используя StructureMap - PullRequest
0 голосов
/ 12 августа 2011

У меня есть следующий интерфейс репозитория

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.....
}

Я создал 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....
}

Единственная разница между репозиторием и фальшивкой заключается в том, что вместо использования LinqToSQL DBContext я создал поддельный для тестирования.

Что я тогда, чточтобы быть в состоянии выполнить в моих модульных тестах это:

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

Таким образом, мои тесты всегда будут выполняться с fakedbcontext в памяти.

Однако я получаю ошибку структуры карты 104 ошибка типа плагина ия не уверен почему?

Ответы [ 2 ]

1 голос
/ 14 августа 2011

В вашей Initialize вы должны сопоставить IRepository с FakeRepository.Не Репозиторий против FakeRepository.Тогда в ваших тестах, когда вы попросите экземпляр IRepository, вы получите поддельный.

ObjectFactory.Initialize(x => { x.For(typeof(IRepository<>)).Use(typeof(FakeRepository<>)); });
0 голосов
/ 06 сентября 2011

Почему вы не используете Dev Magic Fake, у него есть Fake репозиторий со множеством функций, таких как: сохранение любого типа, извлечение любого типа с помощью Id, он может сохранить тип постоянным путем сериализации памяти, он также может генерировать данные для вашеготипы и многие другие функции для получения дополнительной информации вы можете увидеть следующую ссылку:

http://devmagicfake.codeplex.com/

Спасибо

M.Radwan

...