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

时间:2019-06-10 18:29:28

标签: c# unit-testing 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>>>创建了以下错误消息:

  

无法从“方法组”转换为“表达式>”

已经阅读了以下类似问题:123,所以我猜我的问题是不同的签名,如果是这样的话我如何将这个签名转换为适用于It.IsAny中的moq

1 个答案:

答案 0 :(得分:1)

请尝试这个

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);
            }