繁体   English   中英

如何使用Moq模拟函数中的谓词

[英]How to Mock a Predicate in a Function using Moq

我想模拟使用Moq期望谓词的Find方法:

public PurchaseOrder FindPurchaseOrderByOrderNumber(string purchaseOrderNumber)
    {
        return purchaseOrderRepository.Find(s => s.PurchaseOrderNumber ==    purchaseOrderNumber).FirstOrDefault();
    }

我的存储库方法

IList<TEntity> Find(Func<TEntity, bool> where);

我使用了以下测试方法

[TestMethod]
  public void CanGetPurchaseOrderByPurchaseOrderNumber()
 {

      _purchaseOrderMockRepository.Setup(s => s.Find(It.IsAny<Func<PurchaseOrder, bool>>()).FirstOrDefault())
          .Returns((Func<PurchaseOrder, bool> expr) => FakeFactory.GetPurchaseOrder());

      _purchaseOrderService.FindPurchaseOrderByOrderNumber("1111");


 }

它给了我以下错误:

ServicesTest.PurchaseOrderServiceTest.CanGetPurchaseOrderByPurchaseOrderNumber抛出异常:System.NotSupportedException:Expression引用一个不属于模拟对象的方法:s => s.Find(It.IsAny())。FirstOrDefault

我该如何解决这个问题?

我找到了答案:)

我按如下方式更改了测试并删除了对FirstOrDefault的调用:

[TestMethod]
  public void CanGetPurchaseOrderByPurchaseOrderNumber()
 {

      _purchaseOrderMockRepository.Setup(s => s.Find(It.IsAny<Func<PurchaseOrder, bool>>()))
          .Returns((Func<PurchaseOrder, bool> expr) => new List<PurchaseOrder>() {FakeFactory.GetPurchaseOrder()});

      _purchaseOrderService.FindPurchaseOrderByOrderNumber("1111");

      _purchaseOrderMockRepository.VerifyAll();


 }

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM