Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

Mocking Framework für C++

5 views
Skip to first unread message

Georg Fleischer

unread,
Sep 14, 2009, 8:01:23 AM9/14/09
to
Hallo zusammen,

ich schaue mich gerade nach einem Mocking Framework f�r C++ um.
Hat jemand von euch Erfahrung mit Mocking Frameworks zur Verwendung
in Unit-Tests unter C++ gemacht? Wenn ja, welche Frameworks habt ihr
verwendet?

Gibt es so etwas �hnliches wie Mockito, JMock oder EasyMock (aus
der Java-Welt)?

Als kleines Schmankerl sollte das Ganze dann auch noch unter
Microsoft eMbedded Visual C++ 4.0 integrierbar sein, eine
Kommandozeilenversion w�rde mir f�r den Anfang aber gen�gen.

Gru�,
Georg Fleischer

Helge Kruse

unread,
Sep 15, 2009, 2:21:15 PM9/15/09
to
Georg Fleischer schrieb:

> ich schaue mich gerade nach einem Mocking Framework f�r C++ um.
> Hat jemand von euch Erfahrung mit Mocking Frameworks zur Verwendung
> in Unit-Tests unter C++ gemacht?
Ich habe schon eine Reihe UnitTests f�r meine WinCE C++ Module gebaut.
Sowie ich ein Modul teste, dass an der Icoming Schnittstelle getestet
wird und dazu selbst ein Modul braucht, das eine andere Schnittstelle
implementiert, habe ich selber ein Mock gebaut.

Im Allgemeinen m�chte ich, wenn ich an der getesteten Schnittstelle
Funktion A aufrufe, sehen, dass mein getestetes Modul Funktion B am Mock
aufruft. Dazu braucht man sowieso eigenen Code im Mock. Der hinterl�sst
dann Spuren, der vom UnitTester abgefragt wird. Wie macht das ein
Framework automatisch?

> Als kleines Schmankerl sollte das Ganze dann auch noch unter
> Microsoft eMbedded Visual C++ 4.0 integrierbar sein, eine
> Kommandozeilenversion w�rde mir f�r den Anfang aber gen�gen.

Da ich eh nur ein headless device hatte, kam f�r mich sowieso nur eine
Kommandozeilenversion in Frage.

Gru�,
Helge

Georg Fleischer

unread,
Sep 17, 2009, 4:24:10 AM9/17/09
to
Helge Kruse wrote:
> ...

> Wie macht das ein
> Framework automatisch?

Mit einem Mocking Framework wird von einem Typ (Interface oder Klasse)
eine Mocking-Instanz erstellt. Die ungef�hre Funktionsweise in Java mit
dem Mocking Framework Mockito ist folgende:

// Erstellen einer neuen Liste
List mock = mock(List.class);

someCodeThatInteractsWithMock();

// Sicherstellen, dass die Methode "clear" dreimal aufgerufen wurde
verify(mock, times(3)).clear();

// Sicherstellen, dass die Methode "add" mindest einmal aufgerufen wurde
verify(mock, atLeastOnce()).add(anyObject());

Oder folgendes Beispiel, wo eine Exception geworfen wird, falls auf
dem Mock-Object w�hrend des Tests die Methode "clear" aufgerufen wurde:

List mock = mock(List.class);
doThrow(new RuntimeException()).when(mock).clear();

Das tolle daran ist, dass man sich die komplizierten Mock-Objects
nicht selber schreiben muss und die Mocks f�r jeden Testfall
individuell initialisieren kann. Ansonsten musste man sich Mock-
Objects mit irgendwelchen behelfsm��igen boolean flags oder countern
selber schreiben, aber das entf�llt mit einem Mocking Framework.

Vern�nftiges Unit-Testing ohne Mock-Objects kann ich mir ehrlich gesagt
gar nicht mehr vorstellen, deshalb suche ich ja nach einer L�sung f�r
C++.

Gru�,
Georg Fleischer

Michael Karcher

unread,
Sep 17, 2009, 3:38:39 PM9/17/09
to
Georg Fleischer <fleisch...@gmail.com> wrote:
> Mit einem Mocking Framework wird von einem Typ (Interface oder Klasse)
> eine Mocking-Instanz erstellt. Die ungefähre Funktionsweise in Java mit

> dem Mocking Framework Mockito ist folgende:
>
> // Erstellen einer neuen Liste
> List mock = mock(List.class);
Und damit hast Du ein Problem in C++. Das sieht doch sehr nach Reflection
aus, was in C++ für nicht speziell darauf vorbereitete Klassen nicht geht.

Gruß,
Michael Karcher

Georg Fleischer

unread,
Sep 21, 2009, 4:39:02 AM9/21/09
to
Nach einiger Recherche bin ich auf einige interessante Projekte
gestoßen, was das Mocking für Unit-Tests anbelangt. Diese Projekte
möchte ich euch nicht vorenthalten.

1. Mockpp
Pro: Erprobt (seit 2005 in der Entwicklung)
Contra: Es müssen eigene Mock-Klassen manuell erstellt werden.
Link: http://mockpp.sourceforge.net/

2. Mockcpp
Sehr starkes pro: Es müssen keine eigenen Mock-Klassen erstellt werden.
Contra: Das Projekt ist erst seit Anfang September zugänglich.
Link: http://code.google.com/p/mockcpp/

3. googlemock
Pro: Standardisiertes Mocking Framework von Google, Weit verbreitet
Contra: Bestimmte Voraussetzungen für Compiler notwendig:
- Google Mock depends on advanced C++ features and thus requires a more
modern compiler. It has been tested with gcc 4.0+ on Linux and Mac OS X,
and Microsoft Visual C++ 8.0 SP1 on Windows. Users reported that it also
works with gcc 3.4 and Cygwin, although we haven't tested it there
ourselves.

Link: http://code.google.com/p/googlemock/

Die Variante, die ich bisher als interessanteste ansehe ist Nr. 2 -
Mockcpp. Die intuitive On-The-Fly erstellung von Mock-Objects sieht sehr
einfach aus. Ich werde es demnächst für Einprojekt einsetzen und danach
meine Erfahrungen mit dem Framework posten.

Michael Karcher wrote:
>> // Erstellen einer neuen Liste
>> List mock = mock(List.class);
> Und damit hast Du ein Problem in C++. Das sieht doch sehr nach Reflection
> aus, was in C++ für nicht speziell darauf vorbereitete Klassen nicht
geht.

Nach Sichtung der oben genannten Projekte scheint es doch Wege und
Möglichkeiten zu geben, was die Erstellung von Mock-Objects ohne
konkrete Vorbereitung der Klassen angeht.

Gruß,
Georg

Martin Kulas

unread,
Sep 20, 2009, 4:46:15 PM9/20/09
to
Georg Fleischer wrote:
> Gibt es so etwas �hnliches wie Mockito, JMock oder EasyMock (aus
> der Java-Welt)?

Vielleicht ist Google's gmock f�r Dich interessant [0, 1].
Es bietet wie Java's Mockito auch ein Fluent-Interface-Stil an.


Ciao
Martin

[0] http://code.google.com/p/googlemock/
[1]
http://www.bestechvideos.com/2009/03/20/c-mocks-made-easy-an-introduction-to-gmock

0 new messages