2009-07-10 33 views
0

我有東西,看起來像以下後不添加項目到列表中。但是,每當我嘗試將項目添加到列表中時,它都不會將項目添加到列表中。RhinoMocks:</p> <pre><code>var someList = MockRepository.GenerateStub<IList<ISomething>>(); someList.Add(MockRepository.GenerateStub<ISomething>()); </code></pre> <p>列表被作爲代理創建正確:IList的<T>存根它已經被掐滅

我有一種感覺,這是因爲代理類沒有實現添加的,但我不知道我會如何糾正這種情況,而不只是在做這個:

var someList = new List<ISomething>(); 
someList.Add(MockRepository.GenerateStub<ISomething>()); 

我爲什麼要這麼做這個?比方說,我有我自己的特殊列表,比如MySpecialList,這是一個IList,但在我的單元測試中,我不想通過即時操作的麻煩,我寧願將它存根添加行爲。

回答

2

如果你真的想要列表的行爲作爲一個列表,爲什麼你扼殺它呢?這只是你之後存根的列表嗎?在這種情況下,實例化一個具體的列表並添加一個存根的ISomething。

+0

在我的實際測試中我沒有碰傷它,我只是創建一個列表對象,因爲我有我的問題的底部,但我有我創建自己的列表的情況下,我想知道在這種情況下,將如何處理。我會編輯我的問題來澄清。 – Joseph 2009-07-10 16:09:49

2

你可能不需要添加物品嗎? 難道你不能僅僅調用Add()被調用次數的期望值,然後像Count()那樣返回預期的值嗎?

基本上你在嘲笑一個List,我假設你意味着你正在測試一個依賴於行爲而不是列表實現的類。

Expect.Call(() => someList.Add(1)); 
Expect.Call(() => someList.Add(2)); 
Expect.Call(() => someList.Add(3)); 
Expect.Call(someList.Count()).Returns(3); 

methodBeingTested.Call(someList); 

mocks.VerifyAll(); 

測試'methodBeingTested'添加三個值,然後在它添加項目的列表上調用Count()。

0

我相信GenerateStub方法並不會像您期待的那樣爲您提供一個「智能」存根,只是一個模擬對象,它具有正確工作的屬性,並且在不期望調用時不拋出異常。這裏沒有魔法。

我用的是標準的集合像你一樣,那種假設它們是完全實現:)

相關問題