Я читал много других QA по этой теме, и я все еще не могу найти решение моей проблемы, поэтому я решил раскрыть свой случай.
У меня есть этот интерфейс
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);
}
И это основная структура метода, содержащего Mock, который я хотел бы настроить
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);
}
Я пытался настроить Mock следующим образом:
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.NotSupportedException: Expression ссылается на метод, не принадлежащий фиктивному объекту ....»
Также я хотел бы добавить, что я использую MSTest и Moq
Я знаю, что настройка Мок с использованием Expression - это непросто и не рекомендуется, но для меня это очень важно, потому что "Найти" - это метод, который я часто использую в своем приложении