繁体   English   中英

在Moq中检查表达式输入参数以进行设置

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

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