Необходимо заглушить функцию, которая принимает Func‹› в качестве параметра

У меня есть метод на моем уровне доступа к данным, который может принимать любую функцию в качестве критерия поиска и запускать ее для наших сущностей Entity Framework. Я пытаюсь создать модульные тесты, используя Rhino Mocks на бизнес-уровне, но это вызывает метод DAL. Когда я пытаюсь создать заглушку для этого метода поиска, я не могу заставить его работать правильно. У меня есть следующий метод, который нужно заглушить:

IQueryable<T> AllSearchBy<T>(params Expression<Func<T, bool>>[] search) where T : class;

Кажется, я не могу найти общее выражение для использования, такое как Arg.Is.Anything для функций, поэтому я попытался настроить свое собственное. У меня есть следующее, которое должно возвращать первое значение в моем _fakeObjs, если идентификатор равен 1, и должен возвращать ноль, если идентификатор равен 0 (два отдельных теста):

myObjId = 1;  // or 0 for returning a null
System.Linq.Expressions.Expression<Func<MyObj, bool>> myFunc = (a => a.Id == objId); 
IRepository repositoryMock = MockRepository.GenerateMock<IRepository>();
repositoryMock.Stub(x => x.AllSearchBy<MyObj>(myFunc)).Return(_fakeObjs.Where(x => x.Id == myObjId));

Однако я получаю следующие ошибки. Для того, который должен возвращать объект (значение = 1):

Message: Test method
NS.MyApp.Test.ObjTest.SearchById_ReturnsObj threw exception:
System.ArgumentNullException: Value cannot be null.
Parameter name: source

Для того, который должен возвращать ноль (значение = 0):

Message: Test method
NS.MyApp.Test.ObjTest.SearchById_ReturnsNull threw exception:
Rhino.Mocks.Exceptions.ExpectationViolationException:
IRepository.AllSearchBy<NS.EF.MyObj>([]); Expected #1, Actual #0.

Что мне нужно сделать, чтобы настроить параметр для передачи в AllSearchBy в моем репозитории?

Заранее благодарю за любую помощь!!


person ChristyPiffat    schedule 06.01.2016    source источник


Ответы (1)


Что, если вы попытаетесь передать в качестве аргумента следующее вместо текущего myFunc:

Arg<Expression<Func<MyObj, bool>>[]>.Is.Anything
person Ondra Netočný    schedule 02.03.2016