Search Unity

「Code Coverage」パッケージのご紹介:テストの隙間を見つける

, 5月 22, 2020

テスト駆動開発を目指しているのであれば、コードがテストによって適切にカバーされていることを確認しながら進めていく必要があります。2019.3 で初めてリリースされた Code Coverage プレビュー版パッケージは、コードの鳥瞰的かつ視覚的な概要を提供することで、何かを見逃していないかどうかを確認するのに役立ちます。

Code Coverage パッケージは、Test Runner と組み合わせて使用することで、テストの合否に加えて、コードのどの行がテストされているかを表示できます。Unity 2020.1 ベータ版に合わせて提供されるバージョン 0.3.0-preview では、いくつかの改良が加えられています。

このパッケージは、Unity 2019.2 で追加した m/ScriptReference/TestTools.Coverage.html” target=”_blank” rel=”noopener noreferrer”>Coverage API のクライアントであり、この API と C#のリフレクションを組み合わせて、テストカバレッジデータを OpenCover 形式で出力します。その後、パッケージは ReportGenerator を使用して OpenCover データを解析し、カバレッジデータを一連の HTML ドキュメントとして提示します。

Code Coverage を使い始めるには、まずパッケージマネージャーからプレビューパッケージをインストールする必要があります。2020.1b8 以降を使用している場合は、Edit > Project Settings > Package Manager で「Enable Preview Packages」を有効にしてください。

その後、Edit > Preferences > General で「Enable Code Coverage」にチェックを入れます(注意:Code Coverage を有効にすると、エディターにオーバーヘッドがかかりパフォーマンスが低下するので、カバレッジテストを行っていないときはチェックを外しておくことをおすすめします)。この設定により、Mono が公開しているコードカバレッジデータのインターフェースにパッケージがアクセスできるようになります。設定が終わったら、Unity を再起動します。

これで、テストを実行する準備が整いました。

テストの実行が完了すると、パッケージは HTML カバレッジレポートを生成します。このレポートには全体の行カバレッジ率と、1 行ごとにクラス単位のカバレッジを記載する形式のクラスの一覧表が含まれています。表中のクラス名がリンクになっており、そこからクラス別の詳細なレポートにジャンプすることが可能です。

Code Coverage のレポート

結果をどのように解釈するべきでしょうか。出力された HTML レポートで最も重要な値は「Line coverage」です。これは、テストでカバーされているコードの割合を示します。例えば、75%と表示されている場合、書いたコードの 4 分の 1 がテストでカバーされていないことを意味します。この計算では、どの行がテストでカバーできるかを考慮します。

Coverage History」の下にあるグラフ(スクリーンショットの赤い線)は、このプロジェクトの各回のテスト実行における全体のカバレッジ率をパーセンテージで示しています。このパーセンテージをできるだけ高く保つことを目指してください。この割合が低下している場合は、カバレッジを改善するために、より多くのテストを書くことを検討してください。

Code Coverage は現在 EditMode テストと PlayMode テストをサポートしており、コードカバレッジの経時変化を追跡することができます。また、Test Runner と連動しています。テストを書いていない場合は、必要に応じてカバレッジデータをキャプチャーできる Coverage Recording 機能を提供しています。

Code Coverage ワークショップ

ステップバイステップ形式のワークショップを通じて、さっそく Code Coverage を使ってみましょう。自動テストを書いていなくても、コードの中でテストが必要な箇所を特定する方法をご紹介しています。このワークショップは約 30 分で完了させられます。Code Coverage パッケージをインストールした後、Code Coverage パッケージを選択したまま、パッケージマネージャーのウィンドウに表示されている Samples ドロップダウンを展開すると、このワークショップのマテリアルをインポートするボタンが表示されます。

インポート後に作成される Samples フォルダ内にワークシートがあります。

Code Coverage ワークショップの Worksheet ファイルの場所

このワークショップでは、以下の手順をご案内しています。

  • Code Coverage ツールの紹介
  • Code Coverage パッケージのインストール
  • Code Coverage の有効化
  • サンプルゲームの Shoot()関数のコードの理解​
  • PlayMode テストから Code Coverage レポートを生成​
  • Weapon テストの追加によるカバレッジの改善
  • LaserController のテストの追加​
  • カバレッジデータをクリア​
  • Coverage Reporting を使った Code Coverage レポートの作成​

さらに詳しく学びたい方へ

2020.1 ベータ版の機能を紹介するウェビナーの関連するセクションで、この機能が使われているところを見ることができます。

詳細については、Code Coverage パッケージのドキュメントを参照してください。

Code Coverage パッケージは Unity 2021.1 で検証済みステータスに移行する予定です。お気軽にお試しいただき、ご意見、ご感想をこちらのフォーラムのスレッドまでお寄せください。

5 replies on “「Code Coverage」パッケージのご紹介:テストの隙間を見つける”

I have used this tool a lot and I am so freakin impressed! It is hands down one of the best code coverage tools I have seen! I love that test report. It drives me to perform ebtter coverage :)

One thing I would like to see is a best practices example of how to work with ECS and testing. Goes a bit outside the scope of this blog post but still…

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です