[英]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.