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

Je veux mettre en place l'objet NUnit Mock pour passer comme paramter puis vérifier le résultat de METHODA dans mon unittest.Comment mettre en place NUnit Mock pour objet IGrouping

Comment est-ce que je me moque de cette IGrouping?

Répondre

2

Vous pourriez créer une IGrouping (chaîne, MyObject) de la même façon que vous le feriez pour n'importe quelle interface?

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

Ou bien, vous pouvez aller avec une version live:

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

Cool! merci beaucoup, David. Votre version live est ce que je veux. – tongdee

0

Je suis très nouveau pour objet fantaisie. La première fois dans ma tête est d'essayer d'instancier un objet DynamicMock() et ensuite continuer avec sa méthode ExpectAndReturn().

Pour l'interface IGrouping, il n'y a qu'une seule propriété, Key. Donc, si je veux configurer ExpectAndReturn pour le faire fonctionner dans foreach, peut-être que je dois aller implémenter le Current, Next(), Reset() de IEnumerator.

Ce n'est pas facile de configurer un objet simulé et de perdre beaucoup de temps de développement.

Maintenant, ma solution est comme ceci:

//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(...); 

Merci beaucoup, David B!

Questions connexes