2010-01-30 57 views
1

我正在重写这个问题,以使其更清楚我需要做什么。我想使用的Rhino模拟测试:如何在EF4中模拟Where子句

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);

当我运行此,该期待方法调用抛出一个ArgumentNullException:

值不能为空。 参数名:谓语

我已经试过简单:

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

但是,这将引发当我打电话

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

基本上是一个空引用异常,这是方法,我尝试的一部分嘲笑,所以关键的问题是我如何嘲笑这个Where语句?

回答

1

其中实际上是一个全局静态方法,你不应该嘲笑它。它在IEnumerable上运行,但你可以嘲笑它。

然而,这种麻烦与犀牛嘲弄做。我会建议手动进行模拟(如果你需要这样做)。

+0

关于静态的好处,我错过了。我试图手动模拟IObjectSet接口,现在需要提供一个IQueryProvider对象。需要更多挖掘! – 2010-02-01 11:07:35