--- /dev/null
+Makefile
+ut_gmocktest
--- /dev/null
+#ifndef MOCK_TURTLE_H
+#define MOCK_TURTLE_H
+
+#include "turtle.h"
+#include <gmock/gmock.h>
+
+class MockTurtle : public Turtle {
+public:
+ MOCK_METHOD0(PenUp, void());
+ MOCK_METHOD0(PenDown, void());
+ MOCK_METHOD1(Forward, void(int distance));
+ MOCK_METHOD1(Turn, void(int degrees));
+ MOCK_METHOD2(GoTo, void(int x, int y));
+ MOCK_CONST_METHOD0(GetX, int());
+ MOCK_CONST_METHOD0(GetY, int());
+};
+
+#endif // MOCK_TURTLE_H
--- /dev/null
+#include "painter.h"
+#include "turtle.h"
+
+Painter::Painter(Turtle *turtle) :
+ turtle(turtle)
+{
+}
+
+Painter::~Painter() {
+}
+
+bool Painter::DrawCircle(int x, int y, int radius) {
+ turtle->PenDown();
+ return true;
+}
--- /dev/null
+#ifndef PAINTER_H
+#define PAINTER_H
+
+class Turtle;
+
+class Painter
+{
+ Turtle *turtle;
+
+public:
+ Painter(Turtle *turtle);
+ virtual ~Painter();
+
+ bool DrawCircle(int x, int y, int radius);
+};
+
+#endif // PAINTER_H
--- /dev/null
+#ifndef TURTLE_H
+#define TURTLE_H
+
+class Turtle {
+public:
+ virtual ~Turtle() {}
+ virtual void PenUp() = 0;
+ virtual void PenDown() = 0;
+ virtual void Forward(int distance) = 0;
+ virtual void Turn(int degrees) = 0;
+ virtual void GoTo(int x, int y) = 0;
+ virtual int GetX() const = 0;
+ virtual int GetY() const = 0;
+};
+
+#endif // TURTLE_H
--- /dev/null
+#include "mock_turtle.h"
+#include "painter.h"
+
+#include <gmock/gmock.h>
+#include <gtest/gtest.h>
+
+using ::testing::AtLeast;
+
+
+TEST(PainterTest, TestTurtlePenDownCalledAtLeastOnceWhenDrawCircleCalled)
+{
+ MockTurtle turtle;
+ EXPECT_CALL(turtle, PenDown()).Times(AtLeast(1));
+
+ Painter painter(&turtle);
+
+ EXPECT_TRUE(painter.DrawCircle(0, 0, 10));
+}
+
+int main(int argc, char *argv[])
+{
+ ::testing::InitGoogleMock(&argc, argv);
+ return RUN_ALL_TESTS();
+}
--- /dev/null
+TARGET = ut_gmocktest
+QT -= gui
+CONFIG += console
+CONFIG -= app_bundle
+TEMPLATE = app
+OBJECTS_DIR = .obj
+MOC_DIR = .moc
+SOURCES += ut_gmocktest.cpp \
+ painter.cpp
+HEADERS += \
+ turtle.h \
+ mock_turtle.h \
+ painter.h
+
+GMOCKBUILDDIR = ../../gmock/build
+QMAKE_CXXFLAGS += $$system($$GMOCKBUILDDIR/scripts/gmock-config --cppflags --cxxflags)
+QMAKE_LIBS += $$GMOCKBUILDDIR/lib/.libs/libgmock.a $$GMOCKBUILDDIR/gtest/lib/.libs/libgtest.a