【问题标题】:How do I mock a Where clause in EF4如何在 EF4 中模拟 Where 子句
【发布时间】:2010-01-30 20:31:05
【问题描述】:

我正在重写这个问题,以便更清楚地说明我需要做什么。我正在尝试使用 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 属性中,我希望它在调用return m_context.TxRxModes.Where(txRxMode =&gt; txRxMode.Active); 代码时返回一个空的IQueryable&lt;TxRxMode> 对象。

当我运行它时,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 语句?

【问题讨论】:

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


    【解决方案1】:

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

    然而,用 rhino mocks 做这件事有点麻烦。我建议手动进行模拟(如果您需要这样做的话)。

    【讨论】:

    • 关于静态的好点,我错过了。我试图手动模拟 IObjectSet 接口,现在需要提供一个 IQueryProvider 对象。需要更多的挖掘!
    猜你喜欢
    • 1970-01-01
    • 2016-10-07
    • 2020-03-09
    • 1970-01-01
    • 2015-10-31
    • 2011-07-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多