C++を勉強するにあたってテストコードの書き方を知っておいたほうがいいかなと思い、
トレンドな雰囲気があるgoogle testを試してみた。
試した環境はLinux Mint Debian Edition。あわせて最近勉強中の cmakeを使っている。
googletestを入手する
次のサイトからzipファイルで入手する。
googletestをビルドする
googletestのソースの置き場を $HOME/usr/src
としている。
zipを展開する。
$ unzip gtest-1.7.0.zip
$ cp -r gtest-1.7.0.zip ~/usr/src
cmakeでビルドする。ビルド用のMakefileの置き場は
$HOME/usr/src/gtest-1.7.0/build
としている
$ cd ~/usr/src/gtest-1.7.0
$ mkdir build
$ cd build
$ cmake ..
$ make
これで build
ディレクトリのなかに
libgtest.a
と libgtest_main.a
が作られる。
テスト用プロジェクトとテストコードを書く
プロジェクトのディレクトリの内容は以下の通り。
GoogleTestExample
├── CMakeLists.txt
└── GoogleTestExample
├── CMakeLists.txt
└── gtest_example.cpp
1 directory, 3 files
テストコード。
#include <gtest/gtest.h>
int add(int x, int y)
{
return x + y;
}
TEST(AddTest, Test1)
{
ASSERT_EQ(2, add(1, 1));
}
ビルド用のCMakeLists.txt
cmake_minimum_required(VERSION 2.8)
add_subdirectory(GoogleTestExample)
include_directories
でgoogletestのヘッダファイルの置き場所を指定し、
target_link_libraries
でリンクするライブラリを指定している。
pthreadへのリンクが必要なのかはわからないが、ないとエラーでビルドできなかった。
set(GTEST_ROOT $ENV{HOME}/usr/src/gtest-1.7.0)
include_directories(
${GTEST_ROOT}/include
)
add_executable(gtest_example gtest_example.cpp)
target_link_libraries(gtest_example
pthread
${GTEST_ROOT}/build/libgtest.a
${GTEST_ROOT}/build/libgtest_main.a
)
ビルド/実行
ビルドして実行してみる。
cd GoogleTestExample
mkdir build
cd build
cmake ..
make
./GoogleTestExample/gtest_example
次のように実行結果が得られる。
Running main() from gtest_main.cc
[==========] Running 1 test from 1 test case.
[----------] Global test environment set-up.
[----------] 1 test from AddTest
[ RUN ] AddTest.Test1
[ OK ] AddTest.Test1 (0 ms)
[----------] 1 test from AddTest (0 ms total)
[----------] Global test environment tear-down
[==========] 1 test from 1 test case ran. (0 ms total)
[ PASSED ] 1 test.
pythonとphpくらいでしかテストコードを書いたことないけど、とりあえず同じような感
覚でC++でもテストコードを書けそうだとわかった。ちょっとここに至るまでのステップ
が長い気がするけど、しょうがないのかな。