我正在与vs 2013 Premium中的Shims和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:CodeCoverageMaterial TrackingMaterialTracking.UI.UnitTestsViewsNotificationsListViewNotificationsListViewModelTests.cs:line 65
我也尝试了这个
ShimViewModelBase sBaseViewModel = new ShimViewModelBase((ViewModelBase)notificationsListViewModel);
sBaseViewModel.GetQueryCriteriaFromUriNavigationContext = (T) => { return new List<QueryCriteria>(); };
您正在面对此问题,因为产品dll和相应的fakes dll之间存在不匹配。在您的产品代码中,函数的签名很有可能"公共列表getQueryCriteriafromuri(navigationContext Incontext)"已更改,但是相应的fakes dll仍然旧。创建对应于更新产品DLL的假货DLL并尝试运行测试。希望它会有所帮助。