2011-10-24 40 views
3

我一直在嘗試使用Moq來僞造一個包含多個索引器的對象集(並獲取)。我以前一直在單個索引器中使用Moq很長一段時間,但似乎並沒有使用多個索引器。我知道從我的研究中,Moq可以使用It.IsAny <>索引器參數有問題,但我也嘗試了以下具有特定參數的代碼(如mock [1,「BlockItem」])這是我的代碼:與Moq一起使用多個索引器

m_storageAccessor.SetupSet(
mock => mock[It.IsAny<int>(), It.IsAny<string>()] = It.IsAny<object>()).Callback(
       (int i, string s, object o) => 
         { 
          m_storageAccessor.SetupGet(
           mock => mock[i, s]).Returns(
            () => { return o; }); 
         }); 

無論我給SetupSet()中的索引函數什麼參數,都會再次生成以下異常。

初始化方法UnitTest.BonusHandlerTest.MyTestInitialize拋出 異常。 System.ArgumentNullException: System.ArgumentNullException:值不能爲空。參數名稱: 參數。

System.Linq.Expressions.Expression.ValidateArgumentTypes(MethodInfo的 方法,ReadOnlyCollection 參數) System.Linq.Expressions.Expression.Call(表達式例如, MethodInfo的方法,IEnumerable的1 arguments) System.Linq.Expressions.Expression.Call(Expression instance, MethodInfo method, Expression[] arguments) TCall](Mock 1模擬, 動作1 setterExpression, Func 5 callFactory)b__25() Moq.PexProtector.Invoke [T](Func鍵1 function) Moq.Mock.SetupSet[T](Mock 1個模擬,動作條件)SetupSet(Action`1 setterExpression) UnitTest.BonusHandlerTest.SetupPersistence()在 C:\的Perforce \ dev的\ KHIRST_Client12.BonusHandler \ Client12 \加米納克\ BonusHandler \單元測試\ BonusHandlerTest.cs: 線868 UnitTest.BonusHandlerTest.MyTestInitialize()在 C:\ Perforce的\ dev的\ KHIRST_Client12.BonusHandler \ Client12 \遊戲\ BonusHandler \單元測試\ BonusHandlerTest.cs: 線100

根據我所嘗試的,幾乎看起來像Moq無法做到具有多個參數的索引器。有人有主意嗎? interwebs沒有太多幫助。

回答

2

對於它的價值,我設置這種情況下並沒有例外:

 var myStub = new Mock<Foo>(); 
     myStub.SetupSet(foo => foo[12, "asdf"] = null).Callback((int i, string s, object o) => myStub.SetupGet(foo => foo[i, s]).Returns(o)); 

看來,它不就像It.IsAny <>的參數索引,但也達到設定值。我從來沒有試過在我的測試中這樣做,但是這對我來說似乎是當前工具的限制。

+0

謝謝Erik,驗證這一點。看起來,我將不得不與這個老式的測試組件。 –

相關問題