今度はLinux環境でGoogleTest + カバレッジ on GitHub Actions | あさぼんの3Dプリンタ奮闘記

あさぼんの3Dプリンタ奮闘記

40代のサラリーマンです。
3Dプリンタやプログラミングで苦労していることを書いていこうと思います。

GitHub で公開している

asabon/PFD_Editor (github.com)

のリポジトリで「UnitTest + カバレッジ on GitHub Actions」ができるようになりました。

これは Visual Studio を使った C# の Windows アプリケーションだったので、

テスト環境も Windows です。

 

で、今度は Linux 環境での「UnitTest + カバレッジ on GitHub Actions」に挑戦してみます。

ちょうど、以前作ったちょっとしたリポジトリ

asabon/StateMachine (github.com)

があるので、これを使ってみます。

 

今回はテストフレームワークは GoogleTest を使ってみます。

そして、カバレッジレポート生成は以前使った ReportGenerator を使ってみます。

 

GoogleTest を使うための CMakeLists.txt の書き方は、

Quickstart: Building with CMake | GoogleTest

に説明があるので、基本的にこの通りに対応してみました。

具体的な CMakeLists.txt は上記リポジトリの main あるいはプルリクのブランチを見ていただくのがいいと思うので、ここではあまり示しません。

この手順のままだと、GoogleTest は使えるのですが、GoogleMock が使えないようで、ちょっと困ったな・・・という感じですが、ひとまず GoogleMock は使わないことにして、とりあえず話を先に進めてみます。

 

カバレッジを測定するためにはテストプログラムをビルドする際に↓のオプションを付ければいいみたいです。これをCMakeLists.txtに追記します。


set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} --coverage")

set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} --coverage")

 

これによって、 .gcda と .gcno ファイルが作られました。

今回、テストプログラムを作るにあたって、

  • statemachine.c ( テスト対象 )
  • test.cpp ( テストコード )
をビルドしているのですが、生成されたのは "test.cpp.gcda", "test.cpp.gcno" のみで、うまくいっていない感じがします。が、とりあえずここも置いて、そのまま先に進んでみます。
 
とりあえず *.gcda が作られたのでこれを ReportGenerator に食わせてみます。
以前試した「プルリクコメントにサマリーを表示する」を適用してみたところ、
うーん・・・明らかに思うような結果が得られていないです。
いろいろうまくいっていないので、ちょっとずつ調べていこうと思います。
 
[その後の調査により一歩前進]
その後の調査でわかったこと。
  • ReportGenerator は .gcda を食えない
  • gcov を使って .gcda を .gcov に変換してから食わせる必要がある
ということのようでした。
これをやってみたところ、↓のようになりました。
一応、 Line coverage などが表示されるようになりました。
・・・なんだけど、計測対象がテストコード ( test.cpp ) のみになっていて、これだと意味がないので、もう少し調査が必要みたいです。