Frage

Machen Sie gerade mit C ++ in Unit -Tests. Es sieht so aus, als müsste ich im Laufe meiner Zeit mehrere Stubkurse schreiben. Mein Verständnis ist, dass es einen Unterschied zwischen Mocks und Stubs gibt. Grundsätzlich scheint es, dass Mocks für das Testen von etwas auf dem Objekt (z. B. Überprüfungen) gespielt werden, während Stubs Ihren Test nur erleichtern. Ich denke, für das Verspotten kann ich Googlemock verwenden, aber ich sehe nichts darin, um Stubs zu erstellen (Ala Rhinomocks 'Generatestub).

Gibt es eine Möglichkeit, automatisch generierte Stubs zu erhalten? Hat GoogleLemock Unterstützung für Stubs? Oder muss ich ziemlich manuell manuell Stubs zum Testen erstellen?

War es hilfreich?

Lösung

Ich denke, das fehlende Puzzleteil ist, dass Sie keine Erwartung für eine Methode festlegen müssen, und stattdessen können Sie nur einen Standard -Rückgabewert festlegen.

Mocks

Alle Diskussionen und Beispiele im ""Google Mock für Dummies"konzentriert sich darauf, Erwartungen zu setzen. Alles spricht darum, einen Code ähnlich wie folgt zu verwenden:

EXPECT_CALL(turtle, PenDown())
      .Times(AtLeast(1));

Welches ist, was Sie zum Verspotten wollen, aber für Stubbing haben Sie keine Erwartungen. Nachdem ich dieses Intro gelesen hatte, hatte ich keine Ahnung, wie man Googlemock zum Stubbing verwendet.

Stubs

Ratkoks Kommentar führte mich dazu, herauszufinden, wie ein Standard -Rückgabewert festgelegt werden kann. Hier erfahren Sie, wie Sie einen Rückgabewert für ein verspottetes Objekt angeben, aber keine Erwartung:

ON_CALL(foo, Sign(_))
      .WillByDefault(Return(-1));

http://code.google.com/p/googlemock/wiki/cookbook#setting_the_default_actions_for_a_mock_method

Es scheint, dass GoogleLemock eine Warnung ausgibt, wenn Sie eine Methode aufrufen, die nicht erwartet hat. Anscheinend können Sie diese Warnung verhindern, indem Sie ihre verwenden Nicemock Konstruieren oder Sie können es einfach ignorieren. Außerdem scheint es, dass Sie die Warnung vermeiden können, indem Sie stattdessen eine Erwartung verwenden (was ich nicht sicher bin, ob es eine gute Idee für Stubs ist). Von dem Google Mock FAQ:

EXPECT_CALL(foo, Bar(_))
    .WillRepeatedly(...);

Ich glaube, genau das habe ich herausgefunden.

Aktualisieren

Ich kann bestätigen, dass dies funktioniert. Ich habe einen Unit -Test mit dem Google -Test zusammen mit Googlemock geschrieben und konnte eine Methode für eine Klasse mit On_Call ausstechen.

Andere Tipps

Der einzige Unterschied zwischen einem Mock und einem Stub besteht darin, dass ein Schein Verhalten erzwingt, während ein Stub dies nicht tut.

Soweit mir bekannt ist, sind Google Mocks Mocks standardmäßig Stubs. Sie erzwingen nur das Verhalten, wenn Sie Behauptungen über die verschiedenen Methoden einsetzen.

Schau dir das an: Stubgen und die ähnliche Diskussion hier.

Diese Frage Vielleicht auch nützlich/verwandt.

In Bezug auf Google Mocks verwenden wir es in meinem aktuellen Projekt, um die Stub -Implementierung vollständig zu automatisieren. Praktisch die gesamte Stub -Code -Basis wird mit Google Mocks implementiert.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top