導入は簡単にできたのですが、テストコードのカバレッジだけ集計されて、本来の目的であるフレームワーク側のカバレッジが集計されず、あーだこーだやったので備忘録として書き残しておきます。
導入までに関しては以下を参考にしました。
cpp-coveralls
iOSのライブラリだってTravis CIとかCoverallsとか使うべき - TOKOROM BLOG
iOSアプリのテストをTravis CIで走らせて、コードカバレッジをCoverallsで取る方法 | Web scratch
Objective-C の記事はすぐ見つかったけど c++ の記事は少ないねぇiOSのライブラリだってTravis CIとかCoverallsとか使うべき - TOKOROM BLOG
iOSアプリのテストをTravis CIで走らせて、コードカバレッジをCoverallsで取る方法 | Web scratch
はじめに
はじめに iutest の構成を説明しておきます。- iutest
- doc
- include
- projects
- samples
- src
- test
- tools
test フォルダにテストがあり、そちらでテストを実行し gcov を出力します。
カバレッジ対象は include ディレクトリ以下のソースファイルです。
root
まず、iutest/test ディレクトリで cpp-coveralls を呼び出していたため、ルートディレクトリが iutest/test になっていました。このため、iutest/include のソースファイルへのパスが "../include/iutest_***.hpp" のようになります。 cpp-coveralls では、../ で始まるパスのソースファイルは無視するようになっているため、集計されていませんでした。修正
iutest ディレクトリ(プロジェクトのトップ)で cpp-coveralls を呼ぶように修正
UnicodeDecodeError: 'utf8' codec can't decode byte ...
ソースファイルを utf8 に変換しようとして失敗しています。cpp-coveralls には --encoding オプションがあり、それで別の文字コードを指定することが可能です。
ただ、iutest は UTF8-BOM有り で統一するようにしたので、どこかにそうじゃないファイルがあるようです。。。
修正
Crashes in utf8 decoder · Issue #24 · eddyxu/cpp-coveralls
こちらにも書かれているように、該当のファイルパスを print するようにして(※)問題のファイルを洗い出し、文字コードの変更を行いました。
※
pip install cpp-coverallsで cpp-coveralls をインストールすると lib\python2.7\site-packages\coveralls に展開されるので、そこの coverage.py を編集して print を仕込む。
テストコードの除外
cpp-coveralls で任意のファイル/ディレクトリを除外するには、--exclude (-e) オプションを使います。当初、
coveralls -r ./ -e testのように除外指定をしていましたが、これだと test/*.gcov ファイルの集計が行われずなにもレポートされませんでした。
やりたいことは test/*.gcov は集計するが、テストコードの *.gcov は集計しないことです。
修正
-e オプションを使用すると *.gcov ファイルの集計まで除外してしまうので、--exclude-pattern (-E) オプションを使います。-E オプションは -e オプションと違い、正規表現が使えます。また、-E オプションでの除外指定は *.gcov ファイルの集計には影響しないようです。
coveralls -r ./ -E ".*/test/.*"
これで
これで目的のカバレッジができました。これを書いている時点で 80% と低いので、もう少し網羅率を上げて v1.8.1 リリースといきたいところですね。
0 件のコメント:
コメントを投稿