簡體   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