C ++ Unit Testing: Stubs (keine Mocks)?

8

Einfach in Unit Testing mit C ++ zu kommen. Es sieht so aus, als müsste ich mehrere Stub-Klassen schreiben, während ich weitermache. Mein Verständnis ist, dass es einen Unterschied zwischen Mocks und Stubs gibt. Grundsätzlich scheint es, Mocks sind für, wenn Sie etwas auf dem Objekt (z. B. überprüfen) passiert passiert, während Stubs nur Ihren Test erleichtern. Ich denke, für Spott 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 googlemock Unterstützung für Stubs? Oder muss ich manuell Stubs zum Testen erstellen?

    
User 14.06.2011, 23:32
quelle

4 Antworten

16

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

Spott

Bei all den Diskussionen und Beispielen im " Google Mock for Dummies " geht es um die Festlegung von Erwartungen. Alles spricht davon, einen Code ähnlich dem folgenden zu verwenden:

%Vor%

Was Sie zum Spotten brauchen, aber zum Stubbeln haben Sie keine Erwartungen. Nachdem ich dieses Intro gelesen hatte, hatte ich keine Ahnung, wie man googlemock zum Stubben benutzt.

Stubs

Ratkoks Kommentar führte mich dazu, herauszufinden, wie man einen Standard-Rückgabewert einstellt. So geben Sie einen Rückgabewert für ein verspottetes Objekt an, aber keine Erwartung:

%Vor%

Ссылка

Es scheint, dass googlemock eine Warnung ausgibt, wenn Sie eine Methode aufrufen, die keinen EXPECT_CALL hat. Anscheinend können Sie diese Warnung verhindern, indem Sie ihr NiceMock -Konstrukt verwenden, oder Sie können es einfach ignorieren. Zusätzlich scheint es, dass Sie die Warnung vermeiden können, indem Sie stattdessen expect verwenden (was ich nicht sicher bin, ob es eine gute Idee für Stubs ist). Aus den Google Mock-FAQ :

%Vor%

Ich glaube, genau das habe ich versucht herauszufinden.

Aktualisieren

Ich kann bestätigen, dass das funktioniert. Ich schrieb einen Komponententest mit google test zusammen mit googlemock und war in der Lage, eine Methode für eine Klasse mit ON_CALL auszugeben.

    
User 15.06.2011, 14:47
quelle
3

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

Soweit ich weiß, sind Google Mocks Mocks standardmäßig Stubs. Sie erzwingen nur dann das Verhalten, wenn Sie Assertionen auf die verschiedenen Methoden setzen.

    
Billy ONeal 14.06.2011 23:44
quelle
0

Hat hier ich glaube

    
Dushara 15.06.2011 11:21
quelle
0

Sieh dir das an: stank und die ähnliche Diskussion hier .

Diese Frage ist vielleicht auch hilfreich.

Bezüglich Google Mocks - wir verwenden es in meinem aktuellen Projekt, um die Stub-Implementierung vollständig zu automatisieren. Praktisch wird die gesamte Stubcode-Basis mit Google-Mocks implementiert.

    
ratkok 15.06.2011 13:00
quelle