Я пишу модульный тест, который требует от меня смоделировать вызов репозитория с помощью метода 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 или мне придется рассмотреть вопрос о переписывании кода моего основного приложения?