テスト駆動開発を目指しているのであれば、コードがテストによって適切にカバーされていることを確認しながら進めていく必要があります。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 行ごとにクラス単位のカバレッジを記載する形式のクラスの一覧表が含まれています。表中のクラス名がリンクになっており、そこからクラス別の詳細なレポートにジャンプすることが可能です。
結果をどのように解釈するべきでしょうか。出力された HTML レポートで最も重要な値は「Line coverage」です。これは、テストでカバーされているコードの割合を示します。例えば、75%と表示されている場合、書いたコードの 4 分の 1 がテストでカバーされていないことを意味します。この計算では、どの行がテストでカバーできるかを考慮します。
「Coverage History」の下にあるグラフ(スクリーンショットの赤い線)は、このプロジェクトの各回のテスト実行における全体のカバレッジ率をパーセンテージで示しています。このパーセンテージをできるだけ高く保つことを目指してください。この割合が低下している場合は、カバレッジを改善するために、より多くのテストを書くことを検討してください。
Code Coverage は現在 EditMode テストと PlayMode テストをサポートしており、コードカバレッジの経時変化を追跡することができます。また、Test Runner と連動しています。テストを書いていない場合は、必要に応じてカバレッジデータをキャプチャーできる Coverage Recording 機能を提供しています。
ステップバイステップ形式のワークショップを通じて、さっそく Code Coverage を使ってみましょう。自動テストを書いていなくても、コードの中でテストが必要な箇所を特定する方法をご紹介しています。このワークショップは約 30 分で完了させられます。Code Coverage パッケージをインストールした後、Code Coverage パッケージを選択したまま、パッケージマネージャーのウィンドウに表示されている Samples ドロップダウンを展開すると、このワークショップのマテリアルをインポートするボタンが表示されます。
インポート後に作成される Samples フォルダ内にワークシートがあります。
このワークショップでは、以下の手順をご案内しています。
2020.1 ベータ版の機能を紹介するウェビナーの関連するセクションで、この機能が使われているところを見ることができます。
詳細については、Code Coverage パッケージのドキュメントを参照してください。
Code Coverage パッケージは Unity 2021.1 で検証済みステータスに移行する予定です。お気軽にお試しいただき、ご意見、ご感想をこちらのフォーラムのスレッドまでお寄せください。