我正在编写一个单元测试,该测试要求我使用下面显示的GetAll()方法来模拟存储库调用-
var name = await _scheduleRepository
.GetAll()
.AnyAsync(s => s.Id != schedule.Id && s.Name == schedule.Name);
当我尝试单独为GetAll()方法编写Moq调用时,主应用程序代码将引发NullReferenceException,指示未拾取模拟数据。
_scheduleRespository.Setup(repository => repository.GetAll()).Returns(testList.AsQueryable());
我已经研究过模拟Async调用本身了-
_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这种方法,还是我必须考虑重写我的主要应用程序代码?