我的接口上有一个如下所示的方法,我想用 Rhino Mocks 对其进行存根:
TValue GetPropertyOfExistingObject<TValue>(long id, Expression<Func<T, TValue>> propertyExpression);
我的存根代码如下所示:
var service = MockRepository.GenerateStub<IQuoteService>();
service.Stub(s => s.GetPropertyOfExistingObject(1, q => q.QuoteNumber)).Return(1234);
请注意,该方法中的参数之一是Expression<Func<T1, T2>>
,并且此存根未返回指定的值。我知道我可以通过使用 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));
}
}
然后更改存根语句以将表达式包装在对表达式匹配器的调用中:
service.Stub(s => s.GetPropertyOfExistingObject(Arg<int>.Is.Equal(1), ExpressionMatcher.Matches<Quote>(q => q.QuoteNumber))).Return(1234);
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)