2009-01-14 21 views
2
public myReturnObj MethodA(System.Linq.IGrouping<string, MyObject> group){ 
... 
foreach (MyObject o in group) 
{ 
    //business process 
} 
... 
return myReturnObj; } 

我想建立NUnit的模仿對象傳遞一個放慢參數,然後 檢查治法的結果在我的單元測試。如何建立NUnit的Mock對象爲IGrouping

如何模擬此IGrouping?

回答

2

你可能會模擬一個IGrouping(字符串,MyObject),就像你模擬任何接口一樣?

DynamicMock myMockGrouping = new DynamicMock(typeof IGrouping<string, MyObject>); 

或者,你可以用更多的活版本,請:

List<MyObject> inputs = GetInputs(); 
IGrouping<string, MyObject> myLiveGrouping = inputs 
    .GroupBy(o => "somestring").First(); 
+0

酷!非常感謝,大衛。你的真人版是我想要的。 – tongdee 2009-01-14 08:05:55

0

我很新的模擬對象。我頭一次嘗試實例化一個DynamicMock()對象 ,然後繼續它的ExpectAndReturn()方法。

對於IGrouping接口,只有一個屬性Key。因此,如果我想設置ExpectAndReturn以使其在foreach中工作,也許我必須去實現IEnumerator的Current,Next(),Reset()。

這不容易設置模擬對象,浪費了大量的開發時間。

現在我的解決辦法是這樣的:

//prepare expected list of objects that want to be tested 
     List<MyObject> list = new List<MyObject>(); 
     list.Add(new MyObject() {BookingNo="111",...}); 
     list.Add(new MyObject() {BookingNo="111",...}); 

     // grouping objects in list 
     IEnumberable<IGrouping<string, MyObject>> group = list.GroupBy(p => p.BookingNo); 

//in my test method 
myReturnObj obj = MethodA(group.First()); 
Assert.xx(...); 

非常感謝你,大衛乙!