bambooflow Note

GoogleTest

最終更新:

bambooflow

- view
メンバー限定 登録/ログイン

GoogleTest


テストフレームワークの1つであるGoogle Test(以下gtest)というものについてメモします。


ダウンロード


  • http://code.google.com/p/googletest/

現時点でのgtest最新版は、1.4.0。
下記は、1.3.0でのインストールについてまとめました.


インストール(Linux)


私の環境Linux(CentOS)へのインストール方法を説明します。

% tar xzf gtest-1.3.0.tar.gz
% cd gtest-1.3.0

% ./configure --prefix=/home/bambooflow/gtest --enable-shared=no
ただし、あらかじめgtestディレクトリは作成しておく

% make
% make install

すると、こんな感じでgtestディレクトリ以下にファイルが作成されます。

./gtest
|-- bin
|   `-- gtest-config
|-- include
|   `-- gtest
|       |-- gtest*.h
|-- lib
|   |-- libgtest.a
|   |-- libgtest.la
|   |-- libgtest_main.a
|   `-- libgtest_main.la
|-- share

細かいファイルは省略で。


簡単なソースコードと実行


  • test_func.cpp
#include <gtest/gtest.h>
 
 
// 検査対象関数
int func( int x ) 
{
    return (x * x); 
}
 
 
// テストベクタ
TEST(FuncTest, vec01)
{
    EXPECT_EQ( 1, func(1));
    EXPECT_EQ( 4, func(2));
    EXPECT_EQ( 9, func(3));
}
 
 
int main( int argc, char* argv[] )
{
    ::testing::InitGoogleTest( &argc, argv );
    return RUN_ALL_TESTS();
}
 
 

ここで、検証対象はfunc関数としています。
func関数は、単に引数を2乗してその値を返します。

テストケース(テストベクタ)はESTマクロを用いて記述します。
ここでTEST()の引数FuncTestはテストケース名で、引数vec01はテスト名です。
名前の付け方は、今回は適当です。

メイン関数には、InitGoogleTest()とRUN_ALL_TESTSの2行を書くだけです。
TESTマクロで書かれたテストケースが自動で実行されます。


コンパイルしてみます。

% g++ -o run.x test_func.cpp  -I /home/bambooflow/gtest/include/ -L /home/bambooflow/gtest/lib/ -lgtest

うまくいけば実行ファイルrun.xが生成されているはずです。

実行します。

% ./run.x
[==========] Running 1 test from 1 test case.
[----------] Global test environment set-up.
[----------] 1 test from FuncTest
[ RUN   ] FuncTest.vec01
[   OK ] FuncTest.vec01
[----------] Global test environment tear-down
[==========] 1 test from 1 test case ran.
[ PASSED ] 1 test.


gtestのいいところは、結果を色を付けて表示してくれるところです。
Failすると、次のように赤く表示されます。

main.cpp:17: Failure
Value of: func(3)
 Actual: 9
Expected: 10
[ FAILED ] FuncTest.vec01
 ・・・
[ FAILED ] 1 test, listed below:
[ FAILED ] FuncTest.vec01


まとめ

gtestは、それほど難しい記述を必要とせず、シンプルにテストケースを記述できると思います。
ヘッダは、gtest.hを呼ぶだけ。
ライブラリは、gtest(ひつようならばgtest_main)だけ。

通常は、検証対象関数とテストケースは、ファイルを分けて書くのが普通ですが、ここでは説明のために1つのファイルに記述しています。
検証対象を含むファイルでは、gtest.hをインクルードせず、検証環境側のみでgtest.hをインクルードするのが望ましい記述になると思います。


gtestは、xUnitを使ったことあればそれほど違和感なく使えると思います。なにせxUnitをベースにしているので。
あと、色がついているので、どこでFailしているかが分かりやすいところが良いです。



以上

タグ:

GoogleTest gtest
記事メニュー
目安箱バナー