C# 如何为iGroup设置NUnit模拟对象 public myReturnObj方法a(System.Linq.IGrouping组){ ... foreach(组中的MyObject o) { //业务流程 } ... 返回myReturnObj;}
我想设置NUnit模拟对象作为参数传递,然后 在我的单元测试中检查MethodA的结果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
如何模拟此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(...);