ユニット テストを記述する方法
ソフトウェア開発を正しい方向に導き、コードの機能に不具合が発生していないかを監視するために、プログラムのユニット テストを記述できます。MATLAB® のユニット テスト フレームワークは 3 種類のテスト オーサリング スキームをサポートしています。
スクリプト ベースのユニット テスト: 各ユニット テストを、テスト スクリプト ファイルの個別のセクションとして記述します。基本的な検定の実行、テスト結果についてフレームワークが記録する診断へのアクセス、実行するテストの選択によるテスト スイートの絞り込み、および
TestRunner
オブジェクトの作成と設定によるテスト実行のカスタマイズができます。関数ベースのユニット テスト: 各ユニット テストを、テスト関数ファイル内にローカル関数として記述します。関数ベースのテストは、xUnit テストの原理を取り入れています。スクリプトベースのテストで提供される機能のサポートに加えて、関数ベースのテストでは充実したテスト オーサリング機能セットにアクセスできます。たとえば、制約、許容誤差、テスト診断などの高度な検定機能を使用できます。
クラス ベースのユニット テスト: 各ユニット テストを、クラス定義ファイル内に
Test
メソッドとして記述します。スクリプトベースのテストおよび関数ベースのテストで提供される機能のサポートに加えて、クラスベースのテストでは、いくつかの高度なテスト オーサリング機能が提供され、フレームワークのすべての機能にアクセスできます。たとえば、共有テスト フィクスチャの使用、テストのパラメーター化、およびテスト内容の再利用ができます。
スクリプト ベースのユニット テスト
スクリプト ベースのテストでは、以下ができます。
テスト間で共有する変数、またはテストに必要な前提条件の定義。
関数
assert
を使用した基本的な検定の実行。たとえば、assert(isequal(actVal,expVal))
を使用して、実際の値と予期した値が等しいことをアサートできます (高度な検定機能は、関数ベースのテストとクラスベースのテストでのみサポートされます)。フレームワークによって記録されたテスト診断へのアクセス。詳細については、テスト診断へのプログラムによるアクセスを参照してください (高度な診断アクションは、関数ベースのテストとクラスベースのテストでのみサポートされます)。
通常、スクリプトベースのテストでは、明示的に Test
要素のスイートを作成せずに、テスト ファイルを作成してそのファイル名を関数 runtests
に渡します。明示的なテスト スイートを作成した場合 (関数 testsuite
、またはmatlab.unittest.TestSuite
クラスのメソッドを使用)、スクリプトベースのテストで使用可能な機能が追加されます。明示的なテスト スイートでは、以下ができます。
スイートの絞り込み。たとえば、
matlab.unittest.selectors
名前空間のクラスを使用します。(いくつかのセレクターはクラスベースのテストにのみ適用可能です)。TestRunner
オブジェクトを作成して、テストを実行するためにそのオブジェクトをカスタマイズ。matlab.unittest.plugins
名前空間のプラグイン クラスをテスト ランナーに追加できます。
スクリプトベースのテストの詳細については、スクリプト ベースのユニット テストの記述とスクリプトベースのテストの拡張を参照してください。
関数ベースのユニット テスト
関数ベースのテストは、スクリプトベースのテストが提供する機能をサポートします。さらに、関数ベースのテストでは、以下ができます。
システムのテスト前の状態をセットアップし、テストの実行後にシステムを元の状態に戻す。これらのタスクは、テスト ファイルごとに 1 回、またはユニット テストごとに 1 回実行できます。詳細については、セットアップ関数と破棄関数を使用したテストの記述を参照してください。
matlab.unittest.fixtures
名前空間のフィクスチャ クラスを使用し (applyFixture
メソッドと共に)、頻繁に使用するテスト アクションのセットアップと破棄を処理する。log
メソッドを使用して、特定の詳細レベルで診断情報を記録する。matlab.unittest.qualifications
名前空間の検定ライブラリ全体を使用する。使用する検定を決定するには、検証、アサーション、その他の検定の表を参照してください。制約、実際値のプロキシ、許容誤差、テスト診断などの高度な検定機能を使用する。
matlab.unittest.constraints
名前空間のクラス、およびmatlab.automation.diagnostics.Diagnostic
インターフェイスから派生させたクラスを検定で使用できます。
関数ベースのテストの詳細については、関数ベースのユニット テストの記述と関数ベースのテストの拡張を参照してください。
クラス ベースのユニット テスト
クラスベースのテストは、スクリプトベースのテストと関数ベースのテストが提供する機能をサポートします。さらに、クラスベースのテストでは、以下ができます。
セットアップ メソッドおよび破棄メソッドのブロックを使用して、環境のテスト前の状態を暗黙的にセットアップし、テストの実行後にシステムを元の状態に戻す。詳細については、クラスを使用するセットアップ コードと破棄コードの記述を参照してください。
クラス間でフィクスチャを共有する。詳細については、共有フィクスチャを使用するテストの記述を参照してください。
テストをカテゴリ別にグループ化してから、指定されたタグを使用してテストを実行する。詳細については、ユニット テストのタグ付けを参照してください。
指定されたパラメーターのリストにあるテストを組み合わせて実行するパラメーター化テストを記述する。詳細については、クラスベースのテストでのパラメーターの使用を参照してください。
サブクラス化と継承を使用して、テスト内容の共有と再利用を行う。たとえば、サブクラスを派生させることにより、テスト クラスに定義されたパラメーターとメソッドを再利用できます。詳細については、クラスの階層 — 概念を参照してください。
クラスベースのテストの詳細については、MATLAB でのクラスベースのユニット テストの作成を参照してください。
ユニット テスト フレームワークの拡張
ユニット テスト フレームワークを使用すると、テスト ツールの作成者はカスタムの制約、診断、フィクスチャおよびプラグインによりテスト記述を拡張できます。たとえば、カスタム プラグインを作成して、スクリプトベース、関数ベースまたはクラスベースのユニット テストの実行時に使用することにより、テスト ランナーを拡張できます。詳細については、テスト フレームワークの拡張を参照してください。