如何在EF4中模拟Where子句

时间:2010-01-30 20:31:05

标签: entity-framework rhino-mocks entity-framework-4

我正在重写这个问题,以便更清楚我需要做什么。我正在尝试使用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&gt;调用return m_context.TxRxModes.Where(txRxMode => txRxMode.Active);代码时的对象。

当我运行它时,Expect方法调用抛出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 个答案:

答案 0 :(得分:1)

实际上,全局静态方法在哪里,你不应该嘲笑它。它在IEnumerable上运行,但你可以嘲笑它。

然而,用犀牛嘲笑它是一种麻烦。我建议手动进行模拟(如果你需要的话)。