google test/mock導入

どうもこんにちは。google信者です。アンドロイドほしーい(というキャンペーンはやっておりません
信者なのでいけてるユニットテストライブラリgoogle test(およびgoogle mock)を紹介することにした。C++専用です*1 *2CppUnitよりは確実にかなり断然記述量が少なくてお勧めです。結果も色で表示されるし!

インストー

http://www10.atwiki.jp/bambooflow/pages/187.html
基本はここのとおり。

  1. とりあえずtar.bz2ファイルをダウンロードしてきて展開
  2. 適当なところにgtestフォルダを作成
# mkdir /home/wonodas/gtest
  1. 後は中身をメイクするだけ!
# cd /home/wondoas/Desktop/gtest-x.x.x/
# ./configure --prefix=/home/wonodas/gtest --enable-shared=no
# make
# make install

これで さっきつくったgtestのところにライブラリが展開される。

2011.4.21追記

1.6.0にアップデートしようとしたんだけど、make installをしようとしたら、

make install is dangerous and not supported. Instead, see README for how to integrate Google Test into your build system

と出てきてしまった。cmakeを使うことを推奨しているぽい。makeまでは今まで通りでOKなんだけどmakeのあとに

g++ -I ${GTEST_DIR}/include -I ${GTEST_DIR} -c ${GTEST_DIR}/src/gtest-all.cc
#libgtest.aを作成する
ar -rv libgtest.a gtest-all.o

とする必要があるもよう。

使い方

Eclipse(Helios)での使い方。

  1. とりあえずテストプロジェクトを作成
  2. テストプロジェクトの環境設定で、[Settings]-[Tool Settings]-[GCC C++ Compiler]-[Includes]でgtest/includeを指定
  3. 同じくLibraries search pathでgtest/libを指定
  4. 同じくLibraliesでgtestを設定
  5. なんかマルチスレッド関連のエラーが出たので一応pthreadもライブラリに追加

ここまでで一応コンパイルは出来るようになる。
書くときは

#include <gtest/gtest.h>

(省略)

TEST(テスト名、ユニークな名前){
(テストの内容)
}

int main(int argc, char** argv){
    testing::InitGoogleTest(&argc, argv);
    return RUN_ALL_TESTS();
}

"テスト名_ユニークな名前"で一つのテストケースとして認識されるようなのでドキュメントには「アンダースコアを使ってはいけない」と書いてあった。
アンダースコアを使ってはいけないことが分かる例
ex.)
TEST(A_Test, constructor) →A_Test_constructorというテストケースとして認識
TEST(A, Test_constructor) →A_Test_constructorというテストケースとして認識
↑上二つの区別が実行時にわからなくなってしまう…とのこと

テスト名を「テストするクラス名+Test」, ユニークな名前を「test+何をテストしているかわかるような名前」にしておけばあまり問題は起きないような。まぁ一応推奨されている通りにやった方がいいんだろうけど…。

なおHudsonで自動ビルドするよ!とかいう場合はJUnit形式のxmlファイルを吐きだしてくれるので結果を表示することができます。
実行時のオプションに--gtest_output=xmlをつけてやればtest_detail.xmlという結果ファイルが実行ディレクトリにできるよ!Linux詳しくない人のために一応書いとこう。

#unitTestingという実行ファイルを実行する
./unitTesting --gtest_output=xml

[参考]
http://opencv.jp/googletestdocs/advancedguide.html#adv-generating-an-xml-report

*1:ちなみにC#のときは全力でMoqをおすすめする。さらにhtmlでソースコードの色分けをしたい場合は全力でgoogle-code-prettifyだ!!

*2:google-code-prettifyに関しては以下を参照!地味に.jsいじるがいいさhttp://webos-goodies.jp/archives/51202317.html