C# 如何为iGroup设置NUnit模拟对象 public myReturnObj方法a(System.Linq.IGrouping组){ ... foreach(组中的MyObject o) { //业务流程 } ... 返回myReturnObj;}

C# 如何为iGroup设置NUnit模拟对象 public myReturnObj方法a(System.Linq.IGrouping组){ ... foreach(组中的MyObject o) { //业务流程 } ... 返回myReturnObj;},c#,unit-testing,nunit,mocking,C#,Unit Testing,Nunit,Mocking,我想设置NUnit模拟对象作为参数传递,然后 在我的单元测试中检查MethodA的结果 如何模拟此iGroup?您可以像模拟任何接口一样模拟iGroup(字符串、MyObject) public myReturnObj MethodA(System.Linq.IGrouping<string, MyObject> group){ ... foreach (MyObject o in group) { //business process } ... return myRet

我想设置NUnit模拟对象作为参数传递,然后 在我的单元测试中检查MethodA的结果


如何模拟此iGroup?

您可以像模拟任何接口一样模拟iGroup(字符串、MyObject)

public myReturnObj MethodA(System.Linq.IGrouping<string, MyObject> group){
 ...
foreach (MyObject o in group)
{
    //business process
}
...
return myReturnObj; }
dynamicmockmymockgrouping=新的DynamicMock(IGrouping的类型);
或者,您也可以选择更生动的版本:

DynamicMock myMockGrouping = new DynamicMock(typeof IGrouping<string, MyObject>);
List inputs=GetInputs();
I分组myLiveGrouping=输入
.GroupBy(o=>“somestring”).First();

我对模拟对象非常陌生。我头一次尝试实例化 一个DynamicMock()对象,然后继续使用它的ExpectAndReturn()方法

对于IGrouping接口,只有一个属性,Key。因此,如果我想设置ExpectAndReturn使其在foreach中工作,也许我必须实现IEnumerator的Current,Next(),Reset()

建立模拟对象并不容易,而且浪费了大量的开发时间

现在我的解决方案是这样的:

List<MyObject> inputs = GetInputs();
IGrouping<string, MyObject> myLiveGrouping = inputs
  .GroupBy(o => "somestring").First();
//准备要测试的对象的预期列表
列表=新列表();
添加(新的MyObject(){BookingNo=“111”,…});
添加(新的MyObject(){BookingNo=“111”,…});
//将列表中的对象分组
IEnumberable group=list.GroupBy(p=>p.BookingNo);
//在我的测试方法中
myReturnObj obj=MethodA(group.First());
断言.xx(…);

非常感谢你,大卫B

酷!非常感谢,大卫。你的直播版正是我想要的。
    //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(...);