2011-12-11 54 views
4

我想模擬一個接口。我想設置「MockThisProperty」的屬性沒有setter。我無法更改接口源。我得到的錯誤是如何嘲笑沒有二傳手的財產?

上一個方法'IThirdPartyInterface.get_MockThisProperty();'需要返回值或拋出異常。

我試過DynamicMock,Strictmock,部分模擬等

當我嘗試SetupResult.For(thirdParty.MockThisProperty = mockedValue)將無法編譯,因爲沒有制定者。

採用了最新的犀牛嘲笑與MSTEST

不知所措,這裏是代碼...

 var stuff = _Mockery.Stub<Hashtable>(); 
     matchItem.Add(key, "Test"); 

     var thirdParty = _Mockery.Stub<IThirdPartyInterface>(); 
     SetupResult.For(thirdParty.MockThisProperty).Return(stuff); 

     _Mockery.BackToRecordAll(); 


     //more code 

     _Mockery.ReplayAll(); 

     Assert.IsTrue(MethodToTest(thirdParty)); 

     _Mockery.VerifyAll(); 
+0

[起訂量](HTTP: //code.google.com/p/moq/)處理只讀屬性。只是說... – TrueWill

回答

7

這爲我工作:

var thirdParty = Rhino.Mocks.MockRepository.GenerateStub<IThirdPartyInterface>(); 
thirdParty.Stub(x => x.MockThisProperty).Return("bar"); 
string mockPropertyValue = thirdParty.MockThisProperty; //returns "bar" 
+0

工作。如果我使用_Mockery = new MockRepository()_Mockery.Stub <>()像上面那麼它會引發異常。有人知道爲什麼 – Alex

+0

實例化mockrepository更多的是建立模擬和存根的老方法,並且需要很多努力來管理記錄和回放等。使用靜態方法是更新和更喜歡的,更自動和可預測的方式。你可以用處理事物的舊方法得到一些意想不到的結果。 –