1
我上面有一個方法的接口是這樣定義的:起訂量不及格的所有對象的方法
IEnumerable<dynamic> ExecuteDynamic(string query, object param = null)
我想測試的代碼調用像這樣的接口:
var result = _repository.ExecuteDynamic("cart_getNewXsession", new
{
HTTP_USER_AGENT = _context.Request.UserAgent,
RHID = _context.Request.UserHostAddress,
scid = GetSourceCode(),
wsid = _systemSettings.GetWSID(),
HTTP_REFERER = _context.Request.UrlReferrer == null ? "" : _context.Request.UrlReferrer.ToString(),
QUERY_STRING = _context.Request.Url.Query
});
我試圖調用模擬出這種方法是這樣的:
var repository = new Mock<>();
var sprocReturnValue = (new[] { (dynamic)new { guid = "123456" } }).AsEnumerable();
repository.Setup(x => x.ExecuteDynamic("cart_getNewXsession", It.IsAny<object>()))
.Returns<IEnumerable<dynamic>>(x => sprocReturnValue);
然而,當我在測試中運行這個了,我得到的錯誤:
System.Reflection.TargetParameterCountException : Parameter count mismatch.
at System.Reflection.RuntimeMethodInfo.Invoke(Object obj, BindingFlags invokeAttr, Binder binder, Object[] parameters, CultureInfo culture, Boolean skipVisibilityChecks)
at System.Delegate.DynamicInvokeImpl(Object[] args)
at System.Delegate.DynamicInvoke(Object[] args)
at Moq.Extensions.InvokePreserveStack(Delegate del, Object[] args)
at Moq.MethodCallReturn`2.Execute(ICallContext call)
at Moq.Interceptor.Intercept(ICallContext invocation)
at Moq.Proxy.CastleProxyFactory.Interceptor.Intercept(IInvocation invocation)
at Castle.DynamicProxy.AbstractInvocation.Proceed()
at Castle.Proxies.IRepositoryProxy.ExecuteDynamic(String query, Object param)
Services\SessionService.cs(68,0): at Core.Services.SessionService.GetNewXS()
Services\SessionService.cs(49,0): at Core.Services.SessionService.BuildXS()
Services\Session\BuildXS.cs(78,0): at Core.Tests.Services.Session.BuildXS.When_XS_In_Cookie_Use_XS_From_Cookie()
在這種情況下,我應該如何設置我的模擬對象?
奇怪,當我在LinqPad運行例如運行良好。當我從我的項目中提取我的代碼並在linq pad中運行它時,它運行良好。然而在我的項目中,模擬總是返回null。 – ilivewithian 2012-01-31 13:21:51
您的行是'Returns>(x => sprocReturnValue)'。將其更改爲'Returns(sprocReturnValue)'。即使你想訪問調用參數,你有兩個參數(query,param),並且只指定一個(x)。這是參數計數不匹配錯誤的原因。 –
TrueWill
2012-01-31 16:58:15