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