Frage

Ich habe ein verspottete Objekt, das als Konstruktorargument auf ein anderes Objekt übergeben wird.

Wie kann ich testen, dass ein verspottete Objekt Eigentum genannt wurde? Dies ist der Code Ich bin derzeit:

INewContactAttributes newContact = MockRepository.GenerateMock<INewContactAttributes>();
newContact.Stub(x => x.Forenames).Return("One Two Three");
someobject.ConsumeContact(newContact);
newContact.AssertWasCalled(x => { var dummy = x.Forenames; });

Das funktioniert, außer wenn sie innerhalb des „Someobject“ der Getter auf Vornamen Eigenschaft wird mehrfach verwendet. Das ist, wenn ich "Rhino.Mocks.Exceptions.ExpectationViolationException: INewContactAttributes.get_Forenames (); Erwartete # 1, # 2 Actual .."

Sie einfach mit

newContact.AssertWasCalled(x => { var dummy = x.Forenames; }, options => options.Repeat.Any());

funktioniert nicht und gibt den Fehler unten:

"Die Erwartung, von der Warte Erwartungen Liste entfernt wurde, nannte man Repeat.Any ()? Das ist nicht in AssertWasCalled unterstützt wird ()."

So wie gerecht ich für die mehrere Anrufe?

War es hilfreich?

Lösung

newContact.AssertWasCalled(x => { var dummy = x.Forenames; }, options => options.Repeat.AtLeastOnce());

Repeat.Any funktioniert nicht mit AssertWasCalled weil 0 zählt als jede ... so, wenn es nicht genannt wurde, würde die AsserWasCalled TRUE zurück, auch wenn er nicht genannt wurde.

Andere Tipps

Ich bin mit chris Antwort

newContact.AssertWasCalled(x => { var dummy = x.Forenames; }, options => options.Repeat.AtLeastOnce());

Darüber hinaus Wenn Sie genau wissen, wie oft würde die Eigenschaft aufgerufen werden Sie tun können,

newContact.AssertWasCalled(x => { var dummy = x.Forenames; }, options => options.Repeat.Times(n));

, wobei n eine int.

Was ist Ihre Motivation, die Anzahl der Male hinter Überprüfung sie genannt wird? Ist es eine besonders teuere Operation? Wenn ja, dann würde ich vorschlagen, dass Sie ihn hinter einem Verfahren statt wie semantisch gesprochen Eigenschaften sollten kostengünstig Anrufe sein.

Auch die Überprüfung der Anzahl, wie oft eine Eigenschaft genannt wird, ist nicht der Schub der Unit-Tests (keine Sorge, es ein häufiger Fehler ist zu viel zu testen, haben wir es alle gewesen). Was Sie sollten wirklich Tests sein, dass Sie den Status Ihrer Mockobjekt gegeben, dass das Verfahren die erwartete Ausgabe erzeugt. Die Anzahl der Male eine Methode aufgerufen wird, zu tun, die nicht Minster (es sei denn, es ist ein Dienst ist eine E-Mail oder etwas senden). Es ist eine Implementierung Detail, die Sie normalerweise nicht testen, da eine einfache refactor würde Ihre Tests brechen, wie sie zu spezifisch sein würden.

auf Ihre Version von Rhino Je Sie verwenden, können Sie:

// Call to mock object here
LastCall.IgnoreArguments().Repeat.Never();

newContact.Expect (c => c.ForeNames) .Return (...) .Repeat.Any ()

Hier :

mock.AssertWasCalled(x => x.Name ="Bob");

oder

mock.AssertWasCalled(x => x.Name =Arg.Is("Bob"));

oder

mock.AssertWasCalled(x => x.Name =Arg<string>.Is.NotNull);
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top