Moq überschreiben vorherigen setup?
Hallo, ich bin versucht, in ein mock einer Klasse die Methode mit zwei möglichen Eingaben. Wenn ich die Ausgabe nur den letzten Satz bis Rückkehr erwartete Ausgabe. Die erste nicht. Jede Hilfe wird sehr geschätzt.
[Test]
public void ClimbOnceTwoNeighbour_Sample()
{
stateConverter = new Mock<StateConverter>();
solution = new Mock<Solution>();
state = new Mock<State>();
var neightbourSolution1 = new Mock<Solution>();
var neighbourState1 = new Mock<State>();
var neightbourSolution2 = new Mock<Solution>();
var neighbourState2 = new Mock<State>();
stateConverter.Setup(x => x.FromSolution(neightbourSolution1.Object, It.IsAny<State>())).Returns(neighbourState1.Object);
stateConverter.Setup(x => x.FromSolution(neightbourSolution2.Object, It.IsAny<State>())).Returns(neighbourState2.Object);
var state1 = stateConverter.Object.FromSolution(neightbourSolution1.Object, state.Object);//return null ????
var state2 = stateConverter.Object.FromSolution(neightbourSolution2.Object, state.Object);//return neighbourState2.Object)
Assert.AreEqual(neighbourState2.Object, state2);//pass test here
Assert.AreEqual(neighbourState1.Object, state1);//fail here due to null is returned from previous statement
}
- Ich schlage vor, Sie teilen Sie diesen test in zwei verschiedenen tests, eine für jede Art von input. Einfachheit ist der Schlüssel mit unit-tests.
- Ich danke Ihnen sehr für Ihren Kommentar. Dies ist nicht ein Haupt Teil will ich testen, allerdings ist dieser Codeausschnitt Effekt auf das Ergebnis des test. 🙁
- Ich habe die Ursache gefunden-Problem ist allerdings das ich immer noch nicht sicher, wie es zu lösen ist. Wenn der Projektmappen-Klasse hat benutzerdefinierte Gleichheit Umsetzung der Moq funktioniert nicht. Jede Idee, bitte?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Habe ich kopiert dein code-snippet erstellt und leere Klassen, um es zu kompilieren. Es funktioniert wie erwartet. Versuchen Sie es bitte und lassen Sie mich wissen, was das Ergebnis war.
Hier ist der code:
}
Einer der Gewohnheiten, ich hab in mit Moq ist, um die volle Es.Ist(o => o == object) - syntax um Probleme zu vermeiden, wenn das setup-könnte zweideutig sein oder stillschweigend, zur Verfügung. Es könnte sein, dass Moq ist einfach das Objekt in das setup und überschreiben alle anderen es bereits hatten.
Sähe dann wie
Bin ich mir auch nicht sicher, ob dies das Problem behoben, als die Selbstverständlichkeit ist verdammt klar. :/
Haben Sie versucht, so etwas wie das?
Ich denke, dass dieser Weg, wenn Sie assing, um Ihre state1 das Ergebnis der ersten zurückkehren, können Sie Setup erneut aus, und fügen Sie das Ergebnis zu state2 😉