@Zhuchkin

Каки правильно применять юнит тесты к Entity Framework?

Доброго времени суток! У меня есть такой вопрос: у меня есть веб-прриложение asp.net mvc которое работает с базой данных через Entity Frammework. Для работы с Entity я создал класс-провайдер выполняющий стандартные CRUD операции. Хотелось бы все это дело покрыть юнит тестами как у крутых мужиков. Но слышал что юнит тесты не должны работать с базой данных. И это вроде как логично - допустим я хочу потестировать операции вставки, обновления и удаления у своего репозитория но будет странно если тестовый код будет осуществлять эти операции с реальной базой (пусть даже и тестовой).

Пример теста с использованием Moq найденный на просторах интернета
// интерфейс репозитория
    interface IRepository : IDisposable
    {
        List<Computer> GetComputerList();
        Computer GetComputer(int id);
        void Create(Computer item);
        void Update(Computer item);
        void Delete(int id);        
    }

     // тестовый метод
    [TestMethod]
    public void IndexViewBagMessage()
    {        
        var mock = new Mock<IRepository>();
        mock.Setup(a => a.GetComputerList()).Returns(new List<Computer>() { new Computer()});
         // какая то логика тестирования
    }


Но тогда возникает вопрос - а какой у этого всего смысл? Ведь в моке мы подставляем фейковые данные. То есть я вроде кк хочу протестировать работу моего репозитория а вместо этого методы самого репозитория не используются, а вместо них используются подставные данные из мока.

Отсюда вопрос: как все же правильно будет тестировать рнепозиторий и в чем смысл найденого мной примера?
  • Вопрос задан
  • 1117 просмотров
Пригласить эксперта
Ответы на вопрос 2
Fesor
@Fesor
Full-stack developer (Symfony, Angular)
репозиторий не покрывается юнит тестами (иначе выйдет так что вы будете тестировать не свой репозиторий а Entity Framework) Вот и все. Используйте интеграционные/функциональные тесты.
Ответ написан
Комментировать
@Oxoron
Шарпер
Если желаешь протестить работу репозитория - мокируй EF.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы