私自身テストを書くようになったのは最近の話で、テストの書き方・やり方に関しては素人です。
ただ、あとからヒーヒー言ってバグを直すのは嫌なので、
事前にテストを書いて防げたらという思いでやり始めました。
その甲斐あってか、今の会社にいるわけですが、
そこで 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 必須)
123456789101112131415161718192021222324252627282930@
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 のリンクだけです。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
// 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); } |
1 2 3 4 5 6 7 8 |
// 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/ブログでは事細かく説明するつもりはないので、こちらを読んでいただければと思います。