public myReturnObj MethodA(System.Linq.IGrouping<string, MyObject> group){
...
foreach (MyObject o in group)
{
//business process
}
...
return myReturnObj; }
我想设置NUnit Mock对象作为参数传递然后 检查我的unittest中Method的结果。
如何模拟此IGrouping?
答案 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!