gpt4 book ai didi

rhino-mocks - Rhino 模拟 : Can I use Stub() when one of my parameters is Expression>?

转载 作者:行者123 更新时间:2023-12-04 15:16:43 25 4
gpt4 key购买 nike

我在一个看起来像这样的界面上有一个方法,我想用 Rhino Mocks stub 它:

TValue GetPropertyOfExistingObject<TValue>(long id, Expression<Func<T, TValue>> propertyExpression);

我的 stub 代码如下所示:
var service = MockRepository.GenerateStub<IQuoteService>();
service.Stub(s => s.GetPropertyOfExistingObject(1, q => q.QuoteNumber)).Return(1234);

请注意,该方法中的参数之一是 Expression<Func<T1, T2>> ,并且此 stub 未返回指定的值。我知道我可以通过使用 WhenCalled() 来做到这一点,但我想知道 Stub() 是否应该使用表达式参数,或者我是否只是做错了什么。

最佳答案

您可以创建一个方法来评估两个表达式之间的相等性:

public class ExpressionMatcher
{
public static Expression<Action<T>> Matches<T>(Expression<Action<T>> action)
{
var methodName = ((MethodCallExpression) action.Body).Method.Name;
return Arg<Expression<Action<T>>>.Matches(a => ((MethodCallExpression)a.Body).Method.Name.Equals(methodName));
}
}

然后更改 stub 语句以将表达式包装在对表达式匹配器的调用中:
service.Stub(s => s.GetPropertyOfExistingObject(Arg<int>.Is.Equal(1), ExpressionMatcher.Matches<Quote>(q => q.QuoteNumber))).Return(1234);

关于rhino-mocks - Rhino 模拟 : Can I use Stub() when one of my parameters is Expression<Func<T1, T2>>?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/858008/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com