我已經看了很多別人的QA關於這個話題,我仍然無法找到解決我的問題,所以我決定揭露我的案子。Moq.Mock <表達式<Func<T,bool> >>() - 如何設置表達式爲模擬使用起訂量
我有這個接口
public interface IRepository<T> where T : class, IEntity
{
IQueryable<T> Find(Expression<Func<T, bool>> predicate);
T FindIncluding(int id, params Expression<Func<T, object>>[] includeProperties);
}
這是包含模擬,我想該方法的基本結構,建立
public PeopleController CreatePeopleController()
{
var mockUnitofWork = new Mock<IUnitOfWork>();
var mockPeopleRepository = new Mock<IRepository<Person>>();
mockPeopleRepository.Setup(r=>r.Find().Returns(new Person(){});
mockUnitofWork.Setup(p => p.People).Returns(mockPeopleRepository.Object);
return new PeopleController(mockUnitofWork.Object);
}
我一直在試圖建立素使用這樣:
public PeopleController CreatePeopleController()
{
var mockUnitofWork = new Mock<IUnitOfWork>();
var mockPeopleRepository = new Mock<IRepository<Person>>();
mockPeopleRepository.Setup(r=>r.Find(It.isAny<Expression<Func<Person,bool>>>()).Single()).Returns(new Person(){});
mockUnitofWork.Setup(p => p.People).Returns(mockPeopleRepository.Object);
return new PeopleController(mockUnitofWork.Object);
}
但系統總是拋出相同的異常「System.NotSup portedException:表達式引用不屬於嘲笑對象的方法......「
另外我想補充一點,我使用MSTest的起訂量和
我知道,設置一個模擬使用表達式不方便,不推薦,但對我來說非常重要,因爲「發現」是,我在我的應用程序使用了很多方法
埃裏克只實現您的解決方案及其工作..謝謝您幫幫我!!! :) – gustavotroconis
很高興幫助。 :)如果 –
@gustavotroconis這個答案解決您的問題,您可以點擊旁邊的複選標記接受它。當你問更多的問題,「接受%」將出現你的頭像下方,以及較高%鼓勵其他人回答您的問題。 –