どうもこんにちは。google信者です。アンドロイドほしーい(というキャンペーンはやっておりません
信者なのでいけてるユニットテストライブラリgoogle test(およびgoogle mock)を紹介することにした。C++専用です*1 *2。CppUnitよりは確実にかなり断然記述量が少なくてお勧めです。結果も色で表示されるし!
インストール
http://www10.atwiki.jp/bambooflow/pages/187.html
基本はここのとおり。
- とりあえずtar.bz2ファイルをダウンロードしてきて展開
- 適当なところにgtestフォルダを作成
# mkdir /home/wonodas/gtest
- 後は中身をメイクするだけ!
# 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
とする必要があるもよう。
使い方
- とりあえずテストプロジェクトを作成
- テストプロジェクトの環境設定で、[Settings]-[Tool Settings]-[GCC C++ Compiler]-[Includes]でgtest/includeを指定
- 同じくLibraries search pathでgtest/libを指定
- 同じくLibraliesでgtestを設定
- なんかマルチスレッド関連のエラーが出たので一応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