Использование moq с расширением AnyAsync () для GetAll () - PullRequest
0 голосов
/ 12 июня 2019

Я пишу модульный тест, который требует от меня смоделировать вызов репозитория с помощью метода GetAll (), показанного ниже -

var name = await _scheduleRepository
                .GetAll()
                .AnyAsync(s => s.Id != schedule.Id && s.Name == schedule.Name);

Когда я попытался написать вызов Moq для одного только метода GetAll (), основной код приложения выдает исключение NullReferenceException, указывающее, что проверяемые данные не извлекаются.

_scheduleRespository.Setup(repository => repository.GetAll()).Returns(testList.AsQueryable());

Я изучал насмешку над самим асинхронным вызовом -

_scheduleRespository.Setup(r => r.GetAll().AnyAsync(It.IsAny<Expression<Func<ProcessSchedule, bool>>>()))
                    .Callback<Expression<Func<ProcessSchedule, bool>>>(
                        expression =>
                        {
                            var func = expression.Compile();
                            foo = func(new ProcessSchedule() { Name = "FAKE_NAME", Id = 3 });
                        })
                    .Returns(() => Task.FromResult(foo)); 

но это возвращает другую ошибку, показанную ниже -

Message: System.NotSupportedException : Invalid setup on an extension method: r => r.GetAll().AnyAsync<ProcessSchedule>(It.IsAny<Expression<Func<ProcessSchedule, bool>>>())

Возможно ли использовать этот метод в Moq или мне придется рассмотреть вопрос о переписывании кода моего основного приложения?

...