2016-01-06 68 views
0

我的數據訪問層上有一個方法,它可以將任何函數作爲搜索條件,並針對我們的實體框架實體運行該方法。我正嘗試在業務層上使用Rhino Mocks創建單元測試,但是這調用了DAL方法。當我嘗試爲此搜索方法創建存根時,似乎無法使其正確運行。我有存根,需要下面的方法:需要將Func <>作爲參數的函數存根

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

我似乎無法找到一個通用的表達式中使用諸如Arg.Is.Anything的功能,所以我嘗試建立我自己的。我應該在我的_fakeObjs返回第一個值,如果ID爲1,應該返回NULL,如果ID爲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?

在此先感謝您的幫助!

回答

1

如果你嘗試通過以下作爲一個參數,而不是當前myFunc

Arg<Expression<Func<MyObj, bool>>[]>.Is.Anything 
相關問題