【发布时间】:2015-07-13 21:06:35
【问题描述】:
我在 VS 2013 Premium 中使用 Shims and Fakes。在为所有实例填充方法时,我在运行时收到错误“方法和填充程序不兼容”。编译不提供任何错误指示。
有问题的代码:
ShimViewModelBase.AllInstances.GetQueryCriteriaFromUriNavigationContext = (T, C) => { return new List<QueryCriteria>(); };
感谢您提供的任何见解。
根据要求,这是我尝试填充的方法定义。
public List<QueryCriteria> GetQueryCriteriaFromUri(NavigationContext inContext);
完全错误:
An exception of type 'System.ArgumentException' occurred in Microsoft.QualityTools.Testing.Fakes.dll but was not handled in user code
Additional information: incompatible method and shim
堆栈跟踪:
at Microsoft.QualityTools.Testing.Fakes.UnitTestIsolation.UnitTestIsolationRuntime.AttachDetour(Object optionalReceiver, MethodBase method, Delegate detourDelegate)
at Microsoft.QualityTools.Testing.Fakes.Shims.ShimRuntime.SetShimMethod(Delegate optionalStub, Object optionalReceiver, MethodBase method)
at Microsoft.QualityTools.Testing.Fakes.Shims.ShimRuntime.SetShim(Delegate optionalStub, Type receiverType, Object optionalReceiver, String name, ShimBinding flags, Type returnType, Type[] parameterTypes)
at Microsoft.QualityTools.Testing.Fakes.Shims.ShimRuntime.SetShimPublicInstance(Delegate optionalStub, Type receiverType, Object optionalReceiver, String name, Type returnType, Type[] parameterTypes)
at Infrastructure.Fakes.ShimViewModelBase.AllInstances.set_GetQueryCriteriaFromUriNavigationContext(Func`3 value)
at MaterialTracking.UI.Module.Tests.NotificationsListViewModelTests.OnNavigatedToTest() in c:\CodeCoverage\Material Tracking\MaterialTracking.UI.UnitTests\Views\NotificationsListView\NotificationsListViewModelTests.cs:line 65
我也试过了
ShimViewModelBase sBaseViewModel = new ShimViewModelBase((ViewModelBase)notificationsListViewModel);
sBaseViewModel.GetQueryCriteriaFromUriNavigationContext = (T) => { return new List<QueryCriteria>(); };
【问题讨论】:
-
我编辑了提供的代码以包含请求的内容
-
你能分享更多关于
ViewModelBase类的信息吗?它是一个抽象类吗?内部班?它来自一个框架吗?它是您项目的自定义类吗?您是否有一个显示问题的最小项目? -
ViewModelBase 是我公司编写的框架的一部分。它是一个抽象类。它有一个基类并实现了一些接口。我没有最小的项目,因为如果不使用框架,我无法在另一个项目中重现它。
-
我也有同样的问题。我怀疑这是导致问题的继承树。如果是抽象基类,您是否尝试过在实现上设置 shim?
-
该方法不适用于实现类上的 Shimming,因为它使用抽象类中定义的实现。
标签: c# microsoft-fakes shim