@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, я правильно понимаю, или где то ошибся? только начинаю разбираться в этой теме
  • Вопрос задан
  • 341 просмотр
Пригласить эксперта
Ответы на вопрос 2
@dmitryKovalskiy
программист средней руки
Зависит от того что вы хотите потестить. В данном случае вполне возможно что надо уже писать интеграционные тесты, а не unit. Тогда и мокать не надо.
Ответ написан
Комментировать
@kempendyi
.net Framework C# WPF WinForms WCF EntityFramwork
Не совсем ясен вопрос, если хотите затестить UserRepository скройте контекст за интерфейсом и напишите мок.
Затем можно эмулировать "плохое" поведение объекта(контекста), и на основе этого расширять логику репозитория. Ситуация аналогична UserSvc собственно которую Вы и описали (я должен замокать IUserRepository, что бы тестировать чисто сервис. ).

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

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

Войти через центр авторизации
Похожие вопросы