低レベル テスト (LLT) は、Unreal Engine (UE) の軽量なモジュール中心のテスト向けフレームワークです。低レベル テストは Catch2 テスト フレームワークを使用して記述され、UE でサポートされているすべてのプラットフォーム向けに低レベル テストをビルドして実行できます。低レベル テストには、次の種類があります。
- 明示的:モジュールとターゲットのペアによって定義される自己完結型のテストです。
- 暗黙的:テスト対象のモジュール内に存在するテストで、モジュールとターゲットのペアを必要としません。
明示的テストと暗黙的テストの両方で、次のテスト方法のいずれかを使用できます。
- ユニット:コードのスタンドアローン セクションまたはユニットをテストします。
- 統合:コードの複数のセクションまたはユニットをグループとして組み合わせてテストします。
- 機能:機能またはユース ケースの特定の機能性をテストします。
- スモーク:機能またはユース ケースを素早く検証します。
- エンドツーエンド:機能の複数のステージをテストします。
- パフォーマンス:機能の実行時間についてベンチマークを行います。
- ストレス:システムに負荷をかけて機能の中断を試みます。
低レベル テストは、次のテスト パラダイムのいずれかを使用して記述することができます。
- テスト駆動開発 (TDD)
- 動作駆動開発 (BDD)
低レベル テストを使用する理由について
低レベル テストはコンパイルとランタイム リソースが最小限で済むという点で、他の UE テスト フレームワークとは異なります。LLT は UObjects、アセット、エンジン コンポーネント などのさまざまな UE 機能で動作するように作成されています。Unreal Engine の低レベル テストは最新の C++ テスト フレームワークである Catch2 を使用して記述され、テストのグループ化とライフサイクル イベントや、Unreal Engine のモジュラー アーキテクチャで最適に動作する他の機能も含めるように拡張されています。
低レベル テストのドキュメントに関するガイド
これから、いくつかの一般的なテスト方法論についての概要を説明します。
このドキュメントで説明する概要を次に示します。すべてのユース ケースに共通するものは、ドキュメントの「ビルドして実行する」セクションです。これは、テストの実行方法を学ぶ際に不可欠な内容です。
Unreal Engine の低レベル テストのドキュメント
Unreal Engine の低レベル テストのドキュメントでカバーされる内容は次のとおりです。
Catch2 のドキュメント
このドキュメントは、Catch2 で提供される機能についての包括的なリソースを提供するものではありません。Catch2 については、GitHub の Catch2 リポジトリ を参照してください。Catch2 でのテストの記述など、Catch2 の詳細については、Catch2 のドキュメント を参照してください。
テスト方法論
このセクションでは、低レベル テストが実装に役立つさまざまなテスト方法の概要について説明します。
ユニット テスト
ユニット テスト はコードの 1 つのユニット、通常はクラス内の単一メソッドをテストします。これらはモック入力およびサーバーやデータベースなどの外部依存関係に依存します。通常は、テスト対象のクラスごとに 1 つのユニット テスト スイートを記述します。ユニット テストの目的は、クラスのパブリック インターフェースと、メソッド内のさまざまなコード パスをカバーすることです。
ユニット テストはその記述方法に制限が多く、ターゲットとなるコードをその厳密な方法でテストすることができない場合があるため、ほとんどのテストはユニット テストではありません。ユニット テストは最小限の特殊なグローバル設定 (モック、スタブ、フェイクの設定) とティアダウンのみを必要とし、テスト スイート間で個別に実行できるようにする必要があります。ユニット テストには、他のユニット テストへの順序の依存関係を設定しないでください。ユニット テストは非常に高速で、数秒以内に実行されます。
統合テスト
統合テスト はコードの複数のユニット、通常は 2 つ以上のクラスやメソッドをまとめてテストします。これにはモジュールや外部リソースのロードなどのグローバル設定が必要になる場合があります。統合テストはユニット テストほど制限がなく、より一般的ですが、if 条件など、コードのブランチに対応することが難しい場合があります。統合テストはユニット テストに比べて時間がかかり、実行には数秒かかります。
機能テスト
機能テスト は特定の機能、通常は単一の機能やユース ケースをテストします。多くの場合、外部リソースを管理するためのグローバル設定とティアダウンが必要となります。これは最も一般的な種類のテストですが、複雑さの種類はさまざまです。機能テストの実行には数秒から数分かかりますが、数時間かかることはほぼありません。通常は、統合テストより時間がかかります。
スモーク テスト
スモーク テスト は、機能またはユース ケースを素早く検証します。このテストでは最低限の許容基準を確認します。実行に数秒かかる場合はアプリケーションの起動時に、または開発ビルドで実行することができます。通常は、継続的な統合や反復ビルドに含まれます。
エンドツーエンド テスト
エンドツーエンド テスト はセグメントだけではなく、機能の複数のステージを通して実行されます。これは重いテストのため、完了までに数分以上かかる可能性があります。エンドツーエンド テストには通常、テストを停止できる前提条件が設定されたチェックポイントが備わっています。
パフォーマンスおよびストレス テスト
パフォーマンス テスト は多くの場合ベンチマークで、通常は長時間実行されます。ストレス テスト は 1 つの機能をターゲットに、何度もアクションを繰り返したり、システムに負荷をかけたりすることによってその機能の中断を試みるものです。どちらの種類も通常は、ベースラインと比較されるパフォーマンス メトリックをキャプチャします。両方とも速度が遅く、通常は完了するまでに最大で数時間かかりますが、必要とされる実行時間についての一般的なルールはありません。一部のパフォーマンス テストは、数秒や数分で完了するものもあります。
その他の資料
低レベル テストの種類
明示的および暗黙的テストの両方および Unreal Engine コードで構築する方法の詳細について説明しています。
低レベル テストを記述する
Unreal Engine で Catch2 を使用して低レベル テストを記述する方法について、一般的なガイドラインやベスト プラクティスも含めながら説明しています。
低レベル テストをビルドして実行する
Visual Studio、Unreal Build Tool、BuildGraph を使用しながら、Unreal Engine で低レベル テストをビルドして実行する方法について説明しています。