私自身テストを書くようになったのは最近の話で、テストの書き方・やり方に関しては素人です。
ただ、あとからヒーヒー言ってバグを直すのは嫌なので、
事前にテストを書いて防げたらという思いでやり始めました。
その甲斐あってか、今の会社にいるわけですが、
そこで google test(以下、gtest) なるものを使い始めたので、簡単に紹介したいと思います。
※ Google Test 関係の記事一覧はこちら
ダウンロードからリンクまで
gtest をダウンロードして使える状態にします。- ダウンロード
以下のリンクから、gtest-1.6.0.zip をダウンロードします。
http://code.google.com/p/googletest/
- 展開
お好きなディレクトリに解凍します。解凍したパスを GTEST_ROOT とします。 - ビルド
gtest を使うためには、ライブラリをビルドする必要があります。
いくつかビルドファイルが用意されていますが、ここでは CMake と MSBuild を使います。
以下の内容をバッチファイルとして GTEST_ROOT に保存し、実行するだけでビルドできます。(cmake 必須)
@echo off cd msvc if not exist vc2008 mkdir vc2008 cd vc2008 rem cmake cmake -G "Visual Studio 9 2008" ../../ rem MD の場合は、こっち rem cmake -G "Visual Studio 9 2008" -Dgtest_force_shared_crt=ON ../../ if errorlevel 1 goto error rem msbuild へのパスを通す if exist "%VS90COMNTOOLS%" ( call "%VS90COMNTOOLS%\vsvars32.bat" ) else SET PATH=%WINDIR%\Microsoft.NET\Framework\v3.5;%PATH% rem Debug ビルド msbuild /p:Configuration=Debug /p:Platform=Win32 /t:Build gtest.sln if errorlevel 1 goto error rem Release ビルド msbuild /p:Configuration=Release /p:Platform=Win32 /t:Build gtest.sln if errorlevel 1 goto error goto end :error pause :end
- リンク
GTEST_ROOT/include をインクルードパスに追加。
3. で作成したライブラリをリンクさせる。
(Visual Studio の場合、 #pragma comment(lib, "gtest.lib") など。)
テストコードを書く
次に、テストコードを書きます。必要なのは gtest/gtest.h のインクルードと、作成した gtest.lib のリンクだけです。
// gtest を使うために必要なヘッダー #include <gtest/gtest.h> // gtest.lib をリンク #pragma comment (lib, "gtest.lib") int main(int argc, char **argv) { // gtest の初期化 ::testing::InitGoogleTest(&argc, argv); return RUN_ALL_TESTS(); // gtest の実行 } int Factorial(int n) { if( n <= 1 ) return 1; return n * Factorial(n-1); }
// test 内容 TEST(Foo, Factorial) { ASSERT_EQ(1, Factorial(1)); ASSERT_EQ(2, Factorial(2)); ASSERT_EQ(6, Factorial(3)); ASSERT_EQ(40320, Factorial(8)); }
テスト自体の作成はマクロを使用します。
TEST(テストケース名, テスト名)
でテストを登録、以降にテスト内容を書きます。
あとは、必要なテストを追加していくだけ。
非常に簡単です。
ドキュメント
実は、日本語訳されたドキュメントがあります。http://opencv.jp/googletestdocs/ブログでは事細かく説明するつもりはないので、こちらを読んでいただければと思います。