He leído muchos otros QA sobre este tema y todavía no puedo encontrar la solución a mi problema, entonces he decidido exponer mi caso.Moq.Mock <Expression <Func<T,bool> >>() - cómo configurar expresiones en un Mock usando Moq
tengo esta interfaz
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);
}
Y esta es la estructura básica del método que contiene la maqueta que me gustaría configuración
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);
}
que han estado tratando de instalar la maqueta usando de esta manera:
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);
}
Pero el sistema siempre arroja la misma excepción "System.NotSup portedException: Expresión hace referencia a un método que no pertenece al objeto burlado .... "
También me gustaría añadir que estoy usando MSTest y Moq
Sé que configurar una expresión usando Mock no es fácil y no recomendado, pero es muy importante para mí porque "Buscar" es un método que uso mucho en mi aplicación
Erik acaba de implementar la solución y su trabajo .. Gracias por su ¡¡¡ayuda!!! :) – gustavotroconis
Me alegro de que haya ayudado. :) –
@gustavotroconis si esta respuesta resolvió su problema, puede aceptarlo haciendo clic en la marca de verificación junto a él. A medida que haga más preguntas, aparecerá un "aceptar%" debajo de su avatar y un% más animará a otros a responder sus preguntas. –