GoogleTest
テストフレームワークの1つであるGoogle Test(以下gtest)というものについてメモします。
ダウンロード
- http://code.google.com/p/googletest/
現時点でのgtest最新版は、1.4.0。
下記は、1.3.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乗してその値を返します。
func関数は、単に引数を2乗してその値を返します。
テストケース(テストベクタ)はESTマクロを用いて記述します。
ここでTEST()の引数FuncTestはテストケース名で、引数vec01はテスト名です。
名前の付け方は、今回は適当です。
ここでTEST()の引数FuncTestはテストケース名で、引数vec01はテスト名です。
名前の付け方は、今回は適当です。
メイン関数には、InitGoogleTest()とRUN_ALL_TESTSの2行を書くだけです。
TESTマクロで書かれたテストケースが自動で実行されます。
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.
[----------] 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すると、次のように赤く表示されます。
Failすると、次のように赤く表示されます。
main.cpp:17: Failure
Value of: func(3)
Actual: 9
Expected: 10
[ FAILED ] FuncTest.vec01
・・・
[ FAILED ] 1 test, listed below:
[ FAILED ] FuncTest.vec01
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)だけ。
ヘッダは、gtest.hを呼ぶだけ。
ライブラリは、gtest(ひつようならばgtest_main)だけ。
通常は、検証対象関数とテストケースは、ファイルを分けて書くのが普通ですが、ここでは説明のために1つのファイルに記述しています。
検証対象を含むファイルでは、gtest.hをインクルードせず、検証環境側のみでgtest.hをインクルードするのが望ましい記述になると思います。
検証対象を含むファイルでは、gtest.hをインクルードせず、検証環境側のみでgtest.hをインクルードするのが望ましい記述になると思います。
gtestは、xUnitを使ったことあればそれほど違和感なく使えると思います。なにせxUnitをベースにしているので。
あと、色がついているので、どこでFailしているかが分かりやすいところが良いです。
あと、色がついているので、どこでFailしているかが分かりやすいところが良いです。
以上