Expression > avec It.IsAny retourne toujours true

c# expression-trees generics moq unit-testing

Question

J'essaie de créer une classe de test générique pour tester mes contrôleurs génériques. Tout fonctionne bien sauf ceci: j'ai une méthode comme celle-ci:

private T GetSingle(Expression<Func<T, bool>> expression)

J'essaie de configurer le test comme suit:

var Guids = new[] { Guid.NewGuid(), Guid.NewGuid() };
var items = Guids.Select(x => new T {Id = x});
var mock = new Mock<IRepository<T>>();
mock.Setup(m => m.GetSingle(
    It.IsAny<Expression<Func<T, bool>>>()))
   .Returns(new T());

Et exécutez le test comme ceci:

var value = Repository.GetSingle(x=> x.Id == Guid.NewGuid());

Cela retourne toujours un nouveau T.

Est-ce que ma configuration est fausse?

Réponse acceptée

Vous demandez à Moq de renvoyer la même instance exacte (dans ce cas, new T() ), chaque fois que GetSingle est GetSingle , quelle que soit l'expression fournie. Ce que vous voulez réellement, c'est qu'il appelle cette expression contre des items :

mock.Setup(m => m.GetSingle(It.IsAny<Expression<Func<T, bool>>>()))
   .Returns<Expression<Func<T, bool>>>(expression => items.AsQueryable().Single(expression));


Sous licence: CC-BY-SA with attribution
Non affilié à Stack Overflow
Sous licence: CC-BY-SA with attribution
Non affilié à Stack Overflow