Ich versuche, einige Tests für eine bestimmte Schnittstelle mit Moq schreiben. Die Werte des Objekts, das die Schnittstelle implementiert, werden von einer Klasse festgelegt, die wir in dieser Frage "Controller" nennen.Wie bekomme ich einen Wert von einer verspotteten Schnittstelle, die mit Moq nicht funktioniert?
Schnittstelle:
public interface ITestInterface
{
int number {set;}
}
Und mein Mock:
Mock<ITestInterface> myTestMock = new Mock<ITestInterface>();
Um den Test zu tun, erwarte ich, dass die Steuerung die Zahl in der verspottete Klasse setzen, aber dann muß ichbekommen der Wert, um es zu testen. Etwas wie folgt aus:
Controller c = new Controller(myTestMock.Object);
c.Initialize(); //initialization will set number to something
Assert.AreEqual(myTestMock.number, 3);
Natürlich bekomme ich einen Fehler, weil ich diesen Wert nicht lesen kann, da die Schnittstelle nicht über eine „get“ -Methode.
Wie kann ich ein Get für meinen Mock einrichten, ohne die Schnittstelle zu ändern?
Statt 'Assert.AreEqual' schreiben, vielleicht können Sie' myTestMock.VerifySet verwenden (x => x.number = 3); ' –
@ThariqNugrohotomo es wird mir den gleichen Fehler geben "fehlt ein Accessor" – Th0rndike
@ Th0rndike - entfernen Sie die 'Assert' Zeile. @Thariq ist richtig 'myTestMock.VerifySet (x => x.number = 3);' funktioniert. (Habe es gerade getestet, es war auch neu für mich). - angenommen 'c.Initialize();' * really * setzt die Zahl. Ich habe sogar versucht, 'myTestMock.VerifySet (x => x.number = 4);' und es hat den Test nicht bestanden, weil es nur erkannte, dass es auf 3, nicht auf 4 gesetzt wurde. – Corak