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.
となり、無事テストが通りました。