2015-05-04 56 views
2

我正在使用VS 2013 Premium中的墊片和僞造。當爲所有實例提供方法時,我會在運行時遇到錯誤「不兼容的方法和填充」。彙編沒有提供任何錯誤的跡象。僞造一個方法會導致「不兼容方法和填充」異常

有問題的代碼:

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>(); }; 
+0

我編輯提供的代碼以包含請求的內容 – Adrien

+0

您可以分享更多關於'ViewModelBase'類嗎?它是一個抽象類嗎?內部課堂?它來自框架嗎?它是您的項目的自定義類嗎?你有一個顯示問題的最小項目嗎? – jessehouwing

+0

ViewModelBase是我公司編寫的框架的一部分。這是一個抽象類。它有一個基類以及實現一些接口。 我沒有一個最小的項目,因爲我沒有能夠在不使用框架的情況下在另一個項目中重現它。 – Adrien

回答

0

你正面臨這個問題,因爲有之間的不匹配產品DLL和相應的fak es dll。它很有可能在你的產品代碼中的函數「public List GetQueryCriteriaFromUri(NavigationContext inContext)」的簽名已被更改,但相應的假貨DLL仍然很舊。創建對應於更新的產品DLL的假貨DLL並嘗試運行測試。希望它會有所幫助。

+0

感謝您的指針。它看起來像在運行時,它正在從GAC中拉出不同版本的類,而它在編譯期間使用帶有更新類的本地dll。 – Adrien

相關問題