Как настроить NUnit Mock Object для IGrouping - PullRequest
2 голосов
/ 14 января 2009
public myReturnObj MethodA(System.Linq.IGrouping<string, MyObject> group){
 ...
foreach (MyObject o in group)
{
    //business process
}
...
return myReturnObj; }

Я хочу настроить объект NUnit Mock для передачи в качестве параметра, а затем проверьте результат метода А в моем unittest.

Как мне издеваться над этой IGrouping?

Ответы [ 2 ]

2 голосов
/ 14 января 2009

Вы можете макетировать IGrouping (строка, MyObject) так же, как макет любого интерфейса?

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

Или вы можете использовать более живую версию:

List<MyObject> inputs = GetInputs();
IGrouping<string, MyObject> myLiveGrouping = inputs
  .GroupBy(o => "somestring").First();
0 голосов
/ 14 января 2009

Я очень плохо знаком с объектом. Первый раз в моей голове это попытаться создать экземпляр объект DynamicMock () и затем продолжить его методом ExpectAndReturn ().

Для интерфейса IGrouping есть только одно свойство, Key. Поэтому, если я хочу настроить ExpectAndReturn, чтобы он работал в foreach, возможно, мне нужно перейти к реализации Current, Next (), Reset () IEnumerator.

Нелегко настроить фиктивный объект и тратить много времени на разработку.

Теперь мое решение выглядит так:

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

Большое спасибо, Дэвид Б!

...