我已经看了很多别人的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这个答案解决您的问题,您可以点击旁边的复选标记接受它。当你问更多的问题,“接受%”将出现你的头像下方,以及较高%鼓励其他人回答您的问题。 –