Betrachten Sie diese Klasse:Moq - Wie zu überprüfen, ob ein Eigenschaftswert über die Setter gesetzt
public class Content
{
public virtual bool IsCheckedOut {get; private set;}
public virtual void CheckOut()
{
IsCheckedOut = true;
}
public virtual void CheckIn()
{
//Do Nothing for now as demonstrating false positive test.
}
}
Der Checkin Methode ist absichtlich leer. Jetzt habe ich ein paar Testmethoden, um den Status des Aufrufs jeder Methode zu überprüfen.
Der 2. Test besteht aus den falschen Gründen. Also, wie kann ich Spott (Moq) verwenden, um zu überprüfen, dass CheckIn die IsCheckedOut-Eigenschaft setzt?
Danke.
EDIT
Zur Klarstellung: Ich habe eine Methode namens CheckIn(), deren Aufgabe es ist, den IsCheckedOut Status auf false gesetzt.
Sie werden in meinem Testcode oben sehen, dass der Test false zurückgibt, auch wenn ich den Eigenschaftswert nicht auf false setze; Das wird erwartet, hier ist nichts falsch.
Ich denke meine Frage speziell ist Wie kann ich überprüfen, dass die CheckIn() -Methode die IsCheckedOut -Eigenschaft auf false gesetzt hat? Dies würde ich als Verhaltensüberprüfung bezeichnen.
Ich glaube, einige der Kommentare vorgeschlagen, etwas zu tun, die staatliche Überprüfung bedeutet? Wenn so glaube ich nicht, dass es einen Wert gibt, diesen Teil überhaupt in spöttisch, wenn wir einfach nutzen:
Content c = new Content();
c.CheckIn();
Assert.AreEqual(false, c.IsCheckedOut); //State verification
Natürlich kann ich falsch sein, so wenden Sie sich bitte helfen Sie mir, diese Konzepte zu klären :)
Es hängt wirklich vom Zweck der IsChecked out-Eigenschaft ab - wenn es ein Verhalten des Objekts ist, dass nachdem etwas eingecheckt und dann ausgecheckt wurde, falsch ist, dann ist das, was Sie oben haben, in Ordnung. Wenn die Eigenschaft ein Fenster in Ihrer Klasse ist, um ein größeres Verhalten zu überprüfen, würde ich das als Zustandsüberprüfung bezeichnen. Also ... hängt wirklich von der Absicht ab. – FinnNk
Dies schien das Problem zu lösen: http://stackoverflow.com/questions/2853313/moq-how-to-correctly-mock-set-only-properties –
Ist die Frage nicht direkt beantworten, aber ich muss überprüft werden, dass eine Eigenschaft explizit auf "true" gesetzt wurde: 'mock.SetupProperty (foo => foo.SomeProperty);/* Testaktionen ausführen * /; mock.VerifySet (foo => foo.SomeProperty = It.IsAny(), "SomeProperty sollte gesetzt sein"); Assert.True (mock.Object.SomeProperty, "SomeProperty sollte auf true gesetzt worden sein"); ' –