cygwin+eclipse cdtでGoogle TestとGoogle Mockを使用したTDD環境を構築する
Windows上でC/C++を使って開発する際、cygwin+eclipse cdtを使用している。今回、Google TestとGoogle Mockを用いてTDD(テスト駆動開発)の環境を構築する。
Google Test, Google Mockのダウンロード
下記からそれぞれダウンロードする。
gtest-1.7.0.zip - googletest - Source release 1.7.0 - Google C++ Testing Framework - Google Project Hosting gmock-1.7.0.zip - googlemock - Source release 1.7.0 - Google C++ Mocking Framework - Google Project Hosting
zipを解凍して、下記ディレクトリへ格納する。
C:\cygwin\googletest\gtest-1.7.0 C:\cygwin\googletest\gmock-1.7.0
Google Test, Google Mockのビルド
cygwinのターミナルを開き、下記順にてコマンドを入力する。 ただし、事前にcygwin上でg++、makeをインストールし、makeがWindowsのドライブレターを正しく認識できない問題を解決しておくこと。
cygwin+eclipse cdtでC言語をビルドするとエラー発生 - .logbook
$ cd /cygdrive/c/cygwin/googletest/gtest-1.7.0/make/ $ make $ cd /cygdrive/c/cygwin/googletest/gmock-1.7.0/make/ $ make
ビルドに成功すると、下記のようにファイルが生成される。
C:\cygwin\googletest\gtest-1.7.0\make\gtest_main.a C:\cygwin\googletest\gmock-1.7.0\make\gmock_main.a
Google Test, Google Mockを使ってみる
正しくビルドできたことを確認するため、試しに使ってみる。 例題として下記を参考にした。
Cygwin上のg++でGoogle Mockを動かす - uhiaha888の日記
eclipse上でプロジェクトを作成する。(ツールチェーンはCygwin GCCとする)
「gtest_main.a」と「gmock_main.a」をプロジェクト直下にコピーし、「libgteest_main.a」と「libgmock_main.a」にリネームする。
下記のようにソースコードを作成する。
Painter.h
#ifndef _PAINTER_H #define _PAINTER_H #include "Turtle.h" class Painter { public: Painter(Turtle* turtle) : turtle_(turtle){} ~Painter(){} bool DrawCircle(int x, int y, int r); private: Turtle* turtle_; }; #endif // _PAINTER_H
Painter.cpp
#include "Painter.h" bool Painter::DrawCircle(int x, int y, int r) { turtle_->PenDown(); return true; }
Turtle.h
#ifndef _TURTLE_H #define _TURTLE_H class Turtle { public: Turtle(){} virtual ~Turtle() {} virtual void PenUp() = 0; virtual void PenDown() = 0; }; #endif // _TURTLE_H
MockTurtle.h
#ifndef _MOCK_TURTLE_H #define _MOCK_TURTLE_H #include "gmock/gmock.h" #include "Turtle.h" class MockTurtle : public Turtle { public: MOCK_METHOD0(PenUp, void()); MOCK_METHOD0(PenDown, void()); }; #endif // _MOCK_TURTLE_H
PainterTest.cpp
#include "MockTurtle.h" #include "Painter.h" #include "gmock/gmock.h" #include "gtest/gtest.h" using ::testing::AtLeast; TEST(PainterTest, CanDrawSomething) { MockTurtle turtle; EXPECT_CALL(turtle, PenDown()) .Times(AtLeast(1)); Painter painter(&turtle); EXPECT_TRUE(painter.DrawCircle(0, 0, 10)); }
eclipse上からプロジェクトを右クリック→プロパティ→C/C++ ビルド→設定の順で開く。
Cygwin C++ Compilerのインクルードパスに下記を追加する。
"C:\cygwin\googletest\gtest-1.7.0\include" "C:\cygwin\googletest\gmock-1.7.0\include"
ライブラリーに「gmock_main」と「gmock_mock」を追加。 ライブラリー検索パスを「プロジェクト直下」に設定。
テストを実行する
メニューバーの実行→実行をクリックするとテストを実行できる。