0

我的数据访问层上有一个方法,它可以将任何函数作为搜索条件,并针对我们的实体框架实体运行它。我正在尝试在业务层上使用 Rhino Mocks 创建单元测试,但这会调用 DAL 方法。当我尝试为此搜索方法创建存根时,我似乎无法让它正确运行。我有以下需要存根的方法:

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

我似乎找不到Arg.Is.Anything用于函数的通用表达式,所以我尝试设置自己的表达式。如果 Id 为 1,我有以下内容应返回 _fakeObjs 中的第一个值,如果 Id 为 0(两个单独的测试),则应返回 null:

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

对于应该返回 null(值 = 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?

提前感谢您的帮助!!

4

1 回答 1

1

如果您尝试将以下作为参数而不是 current 传递怎么办myFunc

Arg<Expression<Func<MyObj, bool>>[]>.Is.Anything
于 2016-03-02T10:38:00.510 回答