Debian stretchでgoogletestを使ってみる

c++の単体テストフレームワークにgoogletestというのがあります。
Debian stretchで使ってみたいと思います。

まずはインストール
aptでインストールすると

$ sudo apt install googletest

としてパッケージをインストール。

$ dpkg -L googletest

でインストールしたパッケージのファイルをリストするとソースコードが/usr/src/googletest配下にインストールされたので、移動します。

$ cd /usr/src/googletest/

直下にCMakeLists.txtがあるので、cmakeをインストールして、ビルドとインストールをします。

$ sudo apt install cmake
$ sudo cmake .
$ sudo make
$ sudo make install

これで、googletestを使う準備ができました。

では、テストをしてみます。ディレクトリの構成はこんな感じです。

.
├── src
│   └── example.cpp
└── test
    └── example_test.cpp

テスト対象のファイルは引数をインクリメントして返す関数を一つだけ書きます。

int	increment(int	x)
{
	return ++x;
}

関数increment()のテストを書きます。

#include <gtest/gtest.h>

#include "src/example.cpp"

TEST(example_test, func_increment)
{
	ASSERT_EQ(1, increment(0));
}

コンパイル&リンクします。リンクするライブラリはgtest, gtest_main pthreadです。
テスト内にmain()がないためgtest_mainをリンクし、google testがpthreadを使うためpthreadをリンクします。

g++ test/example_test.cpp -I. -lgtest -lgtest_main -lpthread -o example_test

テストを走らせてみます。

$ ./example_test 
Running main() from gtest_main.cc
[==========] Running 1 test from 1 test case.
[----------] Global test environment set-up.
[----------] 1 test from example_test
[ RUN      ] example_test.func_increment
[       OK ] example_test.func_increment (0 ms)
[----------] 1 test from example_test (0 ms total)

[----------] Global test environment tear-down
[==========] 1 test from 1 test case ran. (0 ms total)
[  PASSED  ] 1 test.

となり、無事テストが通りました。