Задать вопрос
@Venesuella
BlackJack и ...

Как правильно делать unit тесты с использованием Moq?

Здравствуйте! Вопрос такой, к примеру есть репозиторий
public class UserRepository
    {
        private EFDbContext _context;

        public UserRepository(EFDbContext context)
        {
            _context = context;
        }

        public IReadOnlyCollection<User> GetAll()
        {
            return _context.User.ToList();
        }
    }


и есть сервис
public class UserSvc
{

private readonly IUserRepository userRepo;
 public UserSvc(IUserRepository userRepo)
{
this.userRepo = userRepo
}

public IReadOnlyCollection<User> GetAll()
{
return  userRepo.GetAll();
}
}


и вот такой вопрос, чтобы протестировать метод GetAll в UserSvc, я должен замокать IUserRepository, что бы тестировать чисто сервис. Но я еще хочу протестировать репозиторий, в этом случае нужно отрефакторить репозиторий, чтобы можно было мокать EFDbContext, но можно ли обойтись без рефакторинга и без моканья EFDbContext, а просто создавать новый экземпляр репозитория, т.к эта конкретная реализация репозитория использует EF, то можно не заморачиваться на счет моканья EFDbContext, я правильно понимаю, или где то ошибся? только начинаю разбираться в этой теме
  • Вопрос задан
  • 390 просмотров
Подписаться 1 Оценить Комментировать
Ответ пользователя Daniil Danilov К ответам на вопрос (2)
@kempendyi
.net Framework C# WPF WinForms WCF EntityFramwork
Не совсем ясен вопрос, если хотите затестить UserRepository скройте контекст за интерфейсом и напишите мок.
Затем можно эмулировать "плохое" поведение объекта(контекста), и на основе этого расширять логику репозитория. Ситуация аналогична UserSvc собственно которую Вы и описали (я должен замокать IUserRepository, что бы тестировать чисто сервис. ).

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