如何为IGrouping设置NUnit Mock对象

时间:2009-01-14 04:59:12

标签: c# unit-testing nunit mocking

public myReturnObj MethodA(System.Linq.IGrouping<string, MyObject> group){
 ...
foreach (MyObject o in group)
{
    //business process
}
...
return myReturnObj; }

我想设置NUnit Mock对象作为参数传递然后 检查我的unittest中Method的结果。

如何模拟此IGrouping?

2 个答案:

答案 0 :(得分:2)

您可以像模拟任何界面一样模拟IGrouping(字符串,MyObject)吗?

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

或者,您可以使用更实时的版本:

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

答案 1 :(得分: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(...);

非常感谢David B!