Mocking mit "traditionellen" Record / Replay vs Moq-Modell

9

Ich bin neu bei Mocks und entscheide mich für ein Mock-Framework. Die Startseite von Moq enthält

  

Momentan ist es das einzige Spott   Bibliothek, die gegen die   verallgemeinert und etwas unintuitiv   (besonders für Anfänger) Record / Reply   Ansatz von allen anderen Frameworks.

Kann jemand einfach erklären, was der Record / Replay-Ansatz ist und wie sich Moq unterscheidet? Was sind die Vor- und Nachteile eines jeden vor allem, wenn es darum geht, einen Rahmen zu finden?

Danke.

    
Fung 16.03.2009, 13:50
quelle

3 Antworten

7

Der Record / Replay-Ansatz wird von RhinoMocks unterstützt. Die Grundidee besteht darin, dass Ihre Testausführung in zwei Phasen unterteilt ist, die Aufzeichnungsphase und die Wiederholungsphase. Um ein bisschen konkreter zu sein

%Vor%

Der Expecting-Block ist also die Record-Phase und der Verify-Block ist die Replay-Phase.

Die Moq-Variante dieses Codes wäre

%Vor%

Was Sie sehen können, ist viel schöner zu lesen. Ich habe früher RhinoMocks benutzt, aber seit ich Moq entdeckt habe, benutze ich nur Moq. Ich finde es viel besser lesbaren Code zu produzieren. Also wäre mein Rat, nach Moq zu gehen.

    
Bas Bossink 16.03.2009, 14:45
quelle
1

RhinoMocks ist eigentlich sehr vielseitig, Sie können beide Ansätze verwenden. RhinoMocks sieht etwas besser als Moq unter dem expect / verify-Stil aus. Aber selbst die Tatsache, dass Sie diesen Stil verwenden können, ist in der Dokumentation vergraben (das letzte Mal, als ich geschaut habe). Wir haben Moq über RhinoMocks für mein aktuelles Projekt ausgewählt, weil wir nicht erkannt haben, dass Setup / Verify funktioniert.

Die Record / Replay-Syntax gibt Ihnen die Möglichkeit, den Wert zu ändern, den eine Methode bei nachfolgenden Aufrufen an diese Methode zurückgibt. Dies kann manchmal nützlich sein. Allerdings ist es oft ein Geruch, dass Ihr Design nicht richtig ist. Es ist jedoch nützlich, wenn Sie sehen können, was falsch ist und Sie müssen weitermachen.

Moq hat die Fähigkeit, den Wert zu ändern, aber es ist etwas klobig (aus der Dokumentation)

%Vor%     
Ed Sykes 30.03.2011 12:12
quelle
0

Ich habe Record / Replay nicht mehr gemacht, weil es im Setup schwierig ist, zu sehen, was stubbed / mocked ist oder nur Code läuft. Ich glaube, dass Rhino mehrere Arbeitsweisen hat. Insbesondere können Sie einen using() -Block verwenden, um das Setup von anderen Aufrufen zu isolieren.

    
Steve Freeman 21.05.2009 17:06
quelle

Tags und Links