2009-09-15 69 views
3

考慮以下幾點:名單 - 最佳實踐/簡化

new SUT(null, null, new List<IObjectBeingMocked>() { mockObjectOne.Object, mockObjectTwo.Object }) 

我的SUT(測試系統)的需求對象作爲第三個參數的清單。這些都需要嘲笑,因爲我已經對這些做了一些期望。

我該如何清除它,以便我可以不必在列表中的每個項目上調用.Object?通常只有兩個項目,但這可能會增長,在我看來,這使得測試更難以閱讀。

將這個模擬對象列表輕鬆/很好地轉換爲實際對象的最佳方式是什麼?

回答

1

您可以使用Mocks.Query()方法,它將返回所有模擬SUT實例的集合。
此功能存在於moq的beta版本中。看詳細here

+0

這是真的,因此我接受它,但我的版本的Moq不支持它,因爲我沒有使用測試版。它的東西,我會看看雖然。 – Finglas 2009-09-16 20:04:36

4

也許你可以使用擴展方法來管理對象屬性的列表創建和調用。

var list = new List<Mock<Foo>>() { ... }; 
new SUT(null, null, list.Select(o => o.Object).ToList()); 
1

你可以introduce explaining variables(當地人)爲清楚:

IObjectBeingMocked objectOne = mockObjectOne.Object; 
IObjectBeingMocked objectTwo = mockObjectTwo.Object; 

new SUT(null, null, new List<IObjectBeingMocked>() { objectOne, objectTwo }); 

編輯:也許比我的 「objectOne」, 「objectTwo」 更好選擇的名稱。 ;)

2

處理此問題的好方法是創建一個GetSUT()方法,該方法只在一個地方創建一次。然後,當你的SUT創建改變時,你只需要在一個地方改變它。