伪造方法会导致"incompatible method and shim"异常



我正在与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并尝试运行测试。希望它会有所帮助。

最新更新