Ausdruck > mit It.IsAny immer wieder wahr

c# expression-trees generics moq unit-testing

Frage

Ich versuche, eine generische Testklasse zu erstellen, um meine generischen Controller zu testen. Alles funktioniert gut außer dem: Ich habe eine Methode wie folgt:

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

Ich versuche, den Test so einzurichten:

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());

Und führe den Test so aus:

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

Dies liefert immer einen neuen T.

Ist mein Setup falsch?

Akzeptierte Antwort

Sie weisen Moq an, die gleiche exakte Instanz (in diesem Fall ein new T() ) zu jedem Zeitpunkt, an dem GetSingle aufgerufen wird, zurückzugeben, ungeachtet des angegebenen Ausdrucks. Was Sie eigentlich wollen, ist, dass er diesen Ausdruck gegen items aufruft:

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


Lizenziert unter: CC-BY-SA with attribution
Nicht verbunden mit Stack Overflow
Ist diese KB legal? Ja, lerne warum
Lizenziert unter: CC-BY-SA with attribution
Nicht verbunden mit Stack Overflow
Ist diese KB legal? Ja, lerne warum