[英]Check expression input parameter for Setup in Moq
我想给一个看起来像这样的方法起订量:
OrderAttrTypeRepository.Get(attributeType => attributeType.Description == 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;
})
但是,当我运行测试时,我总是得到空值。 即使使用property.key =“ ServiceCharge”调用了该方法。
在saveObject对象中,表达式主体如下所示:
attributeType.Description == value(Quipu.Eba.Service.UtilityPaymentService+<>c__DisplayClass53).property.Key)
这就是为什么不对表达式进行评估的原因,因为它们相同。
有什么建议么?
我现在发现问题后便会回答自己。
property.Key
是一个变量,因此当作为表达式求value(Quipu.Eba.Service.UtilityPaymentService+<>c__DisplayClass53).property.Key)
,它会转换为value(Quipu.Eba.Service.UtilityPaymentService+<>c__DisplayClass53).property.Key)
如果property.key
是一个常量字符串,其值为"ServiceCharge"
,那么它将按预期的方式使用该常量的值进行转换,并且我将能够比较这些表达式。
因此,我将不得不以另一种方式来解决问题,因为无论变量property.key的值是多少,它始终会转换为引用而不是值,这意味着,据我所知,这是不可能的我可以区分这些表达。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.