我想要Moq一个看起来像这样的方法:
OrderAttrTypeRepository.Get(attributeType => attributeType.Description == property.Key);
我想根据property.Key
比较这个方法的调用参数我正在尝试这个:
Expression<Func<OrderAttrType, bool>> saveObject;
Expression<Func<OrderAttrType, bool>> criteria = y => y.Description == "ServiceCharge";
Mock.Setup(x => x.OrderAttrTypeRepository.Get(It.IsAny<Expression<Func<OrderAttrType, bool>>>()))
.Callback<Expression<Func<OrderAttrType, bool>>>(i => saveObject = i)
.Returns<Expression<Func<OrderAttrType, bool>>>(filter =>
{
if (Utility.ExpressionComparer.AreEqual(filter, criteria))
return "Whatever";
else
return null;
})
但是,当我运行测试时,我总是得到一个null。即使使用property.key =“ServiceCharge”调用该方法。
在saveObject对象中,表达式主体如下所示:
attributeType.Description == value(Quipu.Eba.Service.UtilityPaymentService+<>c__DisplayClass53).property.Key)
这就是为什么不评估表达式的原因,因为它们是相同的。
有什么建议吗?
答案 0 :(得分:1)
我现在回答自己,我发现了问题。
property.Key
是一个变量,因此,当作为表达式求值时,它会转换为value(Quipu.Eba.Service.UtilityPaymentService+<>c__DisplayClass53).property.Key)
如果property.key
是一个值为"ServiceCharge"
的常量字符串,那么它将按预期变换为常量的值,我将能够比较表达式。
所以,我将不得不以另一种方式关注问题,因为,无论变量property.key的值是什么,它总是转换为它们的引用而不是值,这意味着,据我所知,我无法区分表达方式。