代码之家  ›  专栏  ›  技术社区  ›  Luhmann

是否可以(使用moq)用lambda参数存根方法调用?

  •  6
  • Luhmann  · 技术社区  · 15 年前

    如果我这样做:

    var repository = new Mock<IRepository<Banner>>();
    repository.Setup(x => x.Where(banner => banner.Is.AvailableForFrontend())).Returns(list);
    

    “where”是我的存储库中的一个方法, Func<T, ISpecification<T> . AvailableForFrontEnd返回isSpecification的实现,List是存储库的泛型类型的IEnumberable。

    它编译得很好,但是当我运行测试时会出现以下错误。

    ---- System.NotSupportedException : Expression banner => Convert((banner.Is.AvailableForFrontend() & banner.Is.SmallMediaBanner())) is not supported.
    

    如果我使用存储库中直接进行指定的where的另一个重载,则没有问题。

    所以我的新手mock/moq问题是:我可以用lamdba作为参数来存根方法调用吗?或者我应该用另一种方式来解决这个问题?

    1 回复  |  直到 15 年前
        1
  •  10
  •   darthjit    15 年前

    您尝试过以下语法吗:

    repository.Setup(x => x.Where(It.IsAny<Func<T, ISpecification<T>>()).Returns(list);