将moq与AnyAllsync()扩展到GetAll()

时间:2019-06-12 18:30:24

标签: c# moq xunit

我正在编写一个单元测试,该测试要求我使用下面显示的G​​etAll()方法来模拟存储库调用-

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这种方法,还是我必须考虑重写我的主要应用程序代码?

0 个答案:

没有答案