3 回答

TA貢獻1803條經驗 獲得超3個贊
Moq 不支持 with Expression 函數,所以這是最好的解決方案。使用這個 nuget 包Moq.Expression
// import namespace
using MoqExpression;
// you should do like this it will work
mockrepo.Setup(x => x.SearchFor(MoqHelper.IsExpression<Employee>(s => s.Name.Equals("Test")))).Returns(employeeList.AsQueryable());
更多文檔:點擊這里

TA貢獻1802條經驗 獲得超5個贊
您有幾種選擇:
使用內存中的 ORM(如果一個用于 Active Record)或內存中的對象集合。
將 Active Record 類公開為 Active Record 接口、模擬接口方法并將模擬接口提供給使用它的類。
通常表達式永遠不會被模擬,因為它們是業務邏輯的一部分。模擬的主要建議是基于應用程序架構。

TA貢獻1794條經驗 獲得超8個贊
如果可能的話,我建議稍微重新設計一下:您應該刪除 Get 上的謂詞參數,因為當您返回 IQueryable 時,可以稍后定義諸如“僅獲取活動記錄”之類的條件。
代替
employeess.Get(x => x.EmployeeId == employeeId && x.Active == 1).FirstOrDefault();
你的代碼會變成
employees.Get().FirstOrDefault(x => x.EmployeeID == employeeId && Active == 1);
現在模擬 Get() 變得更加容易,因為您只需要返回 employeeList.AsQuerable()。
- 3 回答
- 0 關注
- 146 瀏覽
添加回答
舉報