Ho letto molti altri QA su questo argomento e non riesco ancora a trovare la soluzione al mio problema, quindi ho deciso di esporre il mio caso.Moq.Mock <Expression <Func<T,bool> >>() - come impostare le espressioni in un Mock usando Moq
ho questa interfaccia
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);
}
E questa è la struttura di base del metodo che contiene la Falsa che vorrei per impostare
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);
}
Ho cercato di impostare il Mock utilizzando in questo modo:
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);
}
Ma il sistema genera sempre la stessa eccezione "System.NotSup portedException: espressione fa riferimento a un metodo che non appartiene all'oggetto deriso .... "
Inoltre vorrei aggiungere che sto usando MSTest e Moq
So che l'installazione di un Mock utilizzando Expression non è facile e non consigliato, ma è molto importante per me perché "Trova" è un metodo che uso molto nella mia app
Erik basta implementare la soluzione e il suo lavoro .. Grazie per la vostra Aiuto!!! :) – gustavotroconis
Felice di averlo aiutato. :) –
@gustavotroconis se questa risposta ha risolto il tuo problema, puoi accettarlo facendo clic sul segno di spunta accanto ad esso. Mentre fai altre domande, un "accetta%" apparirà sotto il tuo avatar, e una percentuale più alta incoraggia gli altri a rispondere alle tue domande. –