如何将表达式签名转换为适用于 `Moq` 的 `It.IsAny`

How to convert expression signature to be applicable with `It.IsAny` of `Moq`

在这个 answer 之后,我尝试了类似的东西并模拟了一个接口:

public interface IGetRepository<TEntity>
{
    IEnumerable<TEntity> Get(
        Func<IQueryable<TEntity>, IOrderedQueryable<TEntity>> orderBy = null);
}

这是我的单元测试方法:

IEnumerable<EventModel> expectedList = return new List<MyModel>() 
{
    new MyModel()
    {
        Id = 0
    }
}

using (var _mock = AutoMock.GetLoose())
{
    var repositoryMock = _mock.Mock<IGenericRepository<EventModel>>();
    repositoryMock
        .Setup(items => items.Get(It.IsAny<Expression<Func<EventModel, bool>>>))
        .Returns(() => expectedList);
}

但是 It.IsAny<Expression<Func<EventModel, bool>>> 创建了一条错误消息:

cannot convert from 'method group' to 'Expression>'

已经阅读了这些类似的问题:1,,,所以我想我的问题是不同的签名,如果是这样 我如何将此签名转换为适用于 It.IsAny moq?

请试试这个

var expectedList = new List<EventModel>()
            {
                new EventModel()
                {
                    Id = 0
                }
            };

            {
                var repositoryMock = new Mock<IGetRepository<EventModel>>();
                repositoryMock
                    .Setup(items => items.Get(It.IsAny<Func<IQueryable<EventModel>, IOrderedQueryable<EventModel>>>()))
                    .Returns(() => expectedList);
            }