Wie benutze ich Rhino.Mocks AssertWasCalled () korrekt?
Nenne ich _mocks.ReplayAll()
, dann ein oder mehrere _mockedObject.AssertWasCalled()
und dann _mocks.VerifyAll()
. Aber es sagt mir, dass "Diese Aktion ist ungültig, wenn das mock-Objekt ist im Aufnahme-Staat".
[Test]
public void SetStateExecuting_Should_Set_State_To_Pause_And_Not_Change_GlobalState_When_GlobalState_Is_Paused()
{
var task = new Task { ID = 1, TimeZone = -660, GlobalState = TaskState.Paused };
_taskDataProvider.Expect(p => p.StateUpdate(task.ID, task.TimeZone, TaskState.Paused));
_mockRepository.ReplayAll();
_manager.SetStateExecuting(task);
_taskDataProvider.AssertWasNotCalled(p => p.GlobalStateUpdate(task.ID,
TaskState.Executing));
_mockRepository.VerifyAll();
}
Was ist die richtige Reihenfolge zu nennen, so dass diese Methoden funktionieren, richtig?
InformationsquelleAutor der Frage HiveHicks | 2010-06-25
Du musst angemeldet sein, um einen Kommentar abzugeben.
Jon Kruger ' s blog-post "So verwenden Sie die rhino mocks, dokumentiert durch tests" hat einfache Beispiele von alles, was Sie tun können, mit rhino mocks Methoden. Er zeigt auch, was Sie nicht tun können, das fand ich sehr hilfreich beim lernen.
Wie bereits erwähnt, mit dem Arrange, Act, Assert-Syntax mit dem statischen Konstruktoren ist einfacher zu Lesen. Der blog-Beitrag zeigt Beispiele für beide Methoden.
Hier sind Beispiele von Jon ' s Beispielcode:
Neue syntax:
Alten Stil:
InformationsquelleAutor der Antwort Maggie
Mischen Sie die alte Record/Replay Muster und die neuen AAA-Muster.
Dem normalen Weg "nicht genannt, mit diesen Argumenten" die Erwartung, während Sie im Aufnahme-Modus sieht wie folgt aus:
Oder alternativ, Sie verwenden können, eine strenge mock, welches einfach nicht zulässt, dass unerwartete Anrufe.
AssertWasCalled
undAssertWasNotCalled
sind bestimmt für AAA, wo Sie Ihre Aussagen am Ende. Mit dem Record/Replay-syntax, Verhalten und expecations sollte eingerichtet werden, an den start, bevor Sie den Schalter auf Wiedergabe-Modus.(
AssertWasNotCalled
könnte in der Tat Arbeit mit der Aufzeichnung/Wiedergabe auch, aber ich habe es auch nie probiert weil ich nicht gerne zum mischen von Elementen aus beiden Ansätzen. Es unnötigerweise verkompliziert die Dinge.)InformationsquelleAutor der Antwort Wim Coenen
Scheint, wie ich die Lösung gefunden. Es scheint ein wenig seltsam, aber es funktioniert. Es stellt sich heraus, dass ich brauche zu nennen ReplayAll() zweimal für einige Grund...
Dies funktioniert:
InformationsquelleAutor der Antwort HiveHicks