Как мне издеваться над предложением «Где» в EF4? - PullRequest
1 голос
/ 30 января 2010

Я переписываю этот вопрос, чтобы прояснить, что мне нужно делать. Я пытаюсь использовать 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);.

Когда я запускаю это, вызов метода 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 Ответ

1 голос
/ 01 февраля 2010

Где на самом деле глобальный статический метод, и вы не должны насмехаться над ним. Он работает на IEnumerable, однако, и вы можете просто посмеяться над этим.

Однако это своего рода хлопоты, связанные с насмешками на носорогов. Я бы порекомендовал сделать макет вручную (если вам нужно это сделать вообще).

...