У меня есть метод на моем уровне доступа к данным, который может принимать любую функцию в качестве критерия поиска и запускать ее для наших сущностей 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 в моем репозитории?
Заранее благодарю за любую помощь!!