Intel C/C++ を用いた Google Test環境を準備する

C++用のテストライブラリーGoogle TestIntel C/C++と一緒に使う。

環境

設定

CMakeをインストールする。

% sudo aptitude install cmake

Google Test本家からソースコードをダウンロードし、解凍する。

% unzip gtest-1.6.0.zip
% cd gtest-1.6.0

CMakeでMakefileを生成する。その後、makeで静的ライブラリー libgtest.a と libgtest_main.a を作成する。

% cmake .
% CC=icc CXX=icpc make |& tee make.log

うまく準備できたかを確認する。

cd make
CC=icc CXX=icpc make
./sample1_unittest

ヘッダーと静的ライブラリーをおいておく場所を作る。

% sudo mkdir -p /usr/local/gtest-1.6.0/lib
% sudo cp -r ./include /usr/local/gtest-1.6.0/
% sudo cp libgtest*.a /usr/local/gtest-1.6.0/lib
% sudo ln -s /usr/local/gtest-1.6.0 /usr/local/gtest

以上で設定終了。

テストに使う

今日もスミマセン。:Google Test (GoogleのC++向けユニットテストフレームワーク) 使ってみたメモで使われているサンプルコードを用いてテストする。

//
// Test case for Google Test
//
#include <gtest/gtest.h>

int add(int x, int y)
{
  // do nothing.
}

// 1 + 1 の結果は 2 になるはず(..だけど、このコードは失敗する)
TEST(AddTest, Test1)
{
  ASSERT_EQ(2, add(1, 1));
}

このファイルをtest.cppとするとき、以下のようにコンパイルする。libgtest_main.a はmain関数を自分で用意する場合には読み込まなくて良い。

% icpc -I/usr/local/gtest/include ./test.cpp /usr/local/gtest/lib/libgtest.a \\
        /usr/local/gtest/lib/libgtest_main.a -lpthread -o test_cpp

実際に実行してみる。

% ./test_cpp 
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
./test.cpp:15: Failure
Value of: add(1, 1)
  Actual: 0
Expected: 2
[  FAILED  ] AddTest.Test1 (1 ms)
[----------] 1 test from AddTest (1 ms total)

[----------] Global test environment tear-down
[==========] 1 test from 1 test case ran. (1 ms total)
[  PASSED  ] 0 tests.
[  FAILED  ] 1 test, listed below:
[  FAILED  ] AddTest.Test1

 1 FAILED TEST

test.cpp の add(int x, int y)の中身をちゃんと作る。

int add(int x, int y)
{
  // do nothing.
  return x+y;
}

コンパイルして実行。

% icpc -I/usr/local/gtest/include ./test.cpp /usr/local/gtest/lib/libgtest.a \\
        /usr/local/gtest/lib/libgtest_main.a -lpthread -o test_cpp
% ./test_cpp
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.