代码之家  ›  专栏  ›  技术社区  ›  Colin Desmond

如何模拟EF4中的Where子句

  •  1
  • Colin Desmond  · 技术社区  · 16 年前

    我正在重新写这个问题,以便更清楚地说明我需要做什么。我正在尝试使用Rhino Mock来测试:

        public IQueryable<TxRxMode> GetAllModes()
        {
            return m_context.TxRxModes.Where(txRxMode => txRxMode.Active);
        }
    

    代码如下:

    var context = MockRepository.GenerateStub<IProjectContext>();
    
    //Returns an empty list
    context.Expect(c => c.TxRxModes.Where(Arg<Func<TxRxMode, bool>>.Is.Anything)).Return(new List<TxRxMode>().AsQueryable());
    

    TxRxModes 在一个 IObjectSet IQueryable<TxRxMode &燃气轮机;当 return m_context.TxRxModes.Where(txRxMode => txRxMode.Active); 代码被调用。

    值不能为null。 参数名称:谓词

    我尝试过更简单的方法:

    IObjectSet<TxRxMode> modes = MockRepository.GenerateStub<IObjectSet<TxRxMode>>();
    context.Expect(c => c.TxRxModes).Return(modes);
    

    但是当我调用

    return m_context.TxRxModes.Where(txRxMode => txRxMode.Active);
    

    基本上,这是我试图模拟的方法的一部分,所以关键问题是如何模拟Where语句?

    1 回复  |  直到 16 年前
        1
  •  1
  •   George Mauer    16 年前

    Where实际上是一个全局静态方法,您不应该嘲笑它。然而,它是在IEnumerable上运行的,你可以嘲笑它。