CMakeでCTestを使うときに最初に設定しておくべきこと

CMakeでテストを動かす場合、最初に見るのは enable_testing()add_test() です。

テストフレームワークを入れる前でも、実行ファイルを1つ作って ctest から呼ぶところまでは確認できます。まずこの形にしておくと、あとからGoogleTestなどを足すときも流れを崩しにくいです。

最小構成

my_project/
├── CMakeLists.txt
└── tests/
    ├── CMakeLists.txt
    └── sample_test.cpp

ルート側ではテストを有効にして、tests を追加します。

cmake_minimum_required(VERSION 3.20)
project(MyProject LANGUAGES CXX)

enable_testing()

add_subdirectory(tests)

enable_testing() は、そのディレクトリ以下でCTestを使うための設定です。

https://cmake.org/cmake/help/latest/command/enable_testing.html

tests側のCMakeLists.txt

add_executable(sample_test
  sample_test.cpp
)

add_test(
  NAME sample_test
  COMMAND sample_test
)

add_test() で、CTestから実行するテスト名とコマンドを登録します。

https://cmake.org/cmake/help/latest/command/add_test.html

最初はこのくらいで十分です。sample_test が終了コード 0 を返せば成功、それ以外なら失敗として扱われます。

テストコード

int main() {
    return 0;
}

実際のプロジェクトならここに検証を書きます。まだテストフレームワークを入れていない段階では、終了コードで成否を見るだけでも流れを確認できます。

実行方法

cmake -S . -B build
cmake --build build
ctest --test-dir build

ビルドディレクトリへ移動してから実行するなら、次でも動きます。

cd build
ctest

CIでは ctest --test-dir build --output-on-failure のようにしておくと、失敗時のログが追いやすいです。

GoogleTestを入れる前に見ること

GoogleTestを入れる場合でも、先にCTestの登録だけ確認しておくと切り分けが楽です。

  • テスト実行ファイルがビルドされているか
  • ctest -N でテスト一覧に出るか
  • 失敗時に終了コードが非0になっているか

ctest -N は実行せずにテスト一覧だけ出します。

ctest --test-dir build -N

まとめ

CMakeでテストを動かす最初の設定は、この3つです。

  • ルートで enable_testing() を呼ぶ
  • テスト用の実行ファイルを作る
  • add_test() でCTestに登録する

テストフレームワークを入れる前に、CTestから実行できる状態を作っておくと後が楽です。

関連記事

参考