今回やること
カバレッジテスト
カバレッジテスト
カバレッジ(coverage)テストとは
テスト関数が全ての関数,if分岐をカバーしているのかをテストします. googletestでcoverageテストを行えるのでそれを導入してみます.
コンパイルオプション
--coverage
を追加します.
add_executable( utest test.cpp ) target_include_directories( utest PRIVATE ${PROJECT_SOURCE_DIR}/src ) target_compile_options( utest PRIVATE -Wall -g --coverage # 追加!! ) target_compile_features( utest PRIVATE cxx_std_17 ) target_link_libraries( utest PRIVATE gtest gtest_main pthread ) target_link_options( utest PRIVATE -g --coverage # 追加!! )
add_custom_target
カバレッジテストを実行するには, プログラムのコンパイル後に色々コマンドが必要ですが,
それをまとめてCMakeLists.txtに書くとこうなります.
add_custom_target
にて一連のコマンドをまとめています.
( 参考: CMake: カスタムターゲットによるグループ化 - Qiita )
cmake_minimum_required(VERSION 3.1) project(MasterMind CXX) ... ( 中略 ) ... # add mastermind and test add_subdirectory(src) add_subdirectory(test) # test enable_testing() add_test( NAME utest COMMAND utest ) # coverage test add_custom_target( coverage DEPENDS utest # 依存するターゲット名 WORKING_DIRECTORY ${CMAKE_BINARY_DIR} # カスタムターゲットの動作ディレクトリ COMMAND ctest # 以下コマンド COMMAND lcov -d test/CMakeFiles/utest.dir/ -c -o coverage.info > lcov.log 2>&1 COMMAND lcov -e coverage.info ${PROJECT_SOURCE_DIR}/src/* -o filtered_coverage.info >> lcov.log 2>&1 COMMAND genhtml -o lcovHtml --num-spaces 4 -s --legend filtered_coverage.info >> lcov.log 2>&1 COMMENT [[create coverage report as lcovHtml/index.html, and log as lcov.log]] )
実行
$ cd build && cmake .. && make
その後
$ make coverage $ open lcovHtml/index.html
こんな感じ, 全て100%が理想です.
まとめ
coverageテストを導入しました. CMakeのadd_custom_target機能を用いて, 一連の処理をコマンド化しました.
コード
参考
他の記事
- 次の記事
- 前の記事
- 一覧 mastermind カテゴリーの記事一覧 - サブロウ丸