課題
Flutter で Unit Test と Integration Test を作成し、カバレッジを計測できるようにしました。
しかし、それぞれの結果をマージする方法がわからず、全体としてテストのカバレッジを計測することができていませんでした。。。
前提
テストを行いカバレッジを計測できる環境であるとします。
- /test ディレクトリに Unit Test コードがあること
- /integration_test ディレクトリに Integration Test コードがあること
- 必要なパッケージが導入されていること(テストが実行できる状態)
- lcov がインストールされていること
やりたいこと
- Unit Test をカバレッジ計測ありで実行する
- Integration Test をカバレッジ計測ありで実行する
- それぞれのカバレッジ結果をマージする
- マージされた結果を html に変換して表示する
スクリプト
#!/bin/bash
# Coverage の出力先ディレクトリを作成
mkdir -p coverage
# build_runner を実行してテストファイル自動生成を行う
flutter pub run build_runner build --delete-conflicting-outputs
# ユニットテストを実行して、カバレッジを取得する
flutter test --coverage --coverage-path ./coverage/lcov_test.info
# 統合テストを実行して、カバレッジを取得する
flutter test --coverage --coverage-path ./coverage/lcov_integration_test.info integration_test
# ユニットテストと統合テストのカバレッジをマージ
lcov -a coverage/lcov_integration_test.info -a coverage/lcov_test.info -o coverage/lcov_merged.info
# 自動生成されたコードを対象から外す
lcov --remove coverage/lcov_merged.info 'lib/**.g.dart' -o coverage/lcov_result.info --ignore-errors unused
# 統合テストとユニットテストのカバレッジをマージしたものを HTML に変換
genhtml coverage/lcov_result.info --output=coverage/html
# 結果(HTML)をブラウザで開く
open coverage/html/index.html
最後に
今回は全てのテストを実施して結果をマージする方法を知ることができました。
しかし、テストが増えると毎回全てのテストを実施するのは辛いので、テストの単位を小さくできて全てをマージできるようにしたいですね。