【问题标题】:How to set up NUnit Mock Object for IGrouping如何为 IGrouping 设置 NUnit 模拟对象
【发布时间】:2009-01-14 04:59:11
【问题描述】:
public myReturnObj MethodA(System.Linq.IGrouping<string, MyObject> group){
 ...
foreach (MyObject o in group)
{
    //business process
}
...
return myReturnObj; }

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

如何模拟这个 IGrouping?

【问题讨论】:

    标签: c# unit-testing nunit mocking


    【解决方案1】:

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

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

    或者,您可以选择更实时的版本:

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

    【讨论】:

    • 酷!非常感谢,大卫。你的现场版本是我想要的。
    【解决方案2】:

    我对模拟对象很陌生。第一次在我脑海中尝试实例化 一个 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(...);
    

    非常感谢大卫 B!

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-03-21
      • 1970-01-01
      • 1970-01-01
      • 2018-11-01
      • 2011-01-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多