Main Content

ユニット テストを記述する方法

ソフトウェア開発を正しい方向に導き、コードの機能に不具合が発生していないかを監視するために、プログラムのユニット テストを記述できます。MATLAB® のユニット テスト フレームワークは 3 種類のテスト オーサリング スキームをサポートしています。

  • スクリプト ベースのユニット テスト: 各ユニット テストを、テスト スクリプト ファイルの個別のセクションとして記述します。基本的な検定の実行、テスト結果についてフレームワークが記録する診断へのアクセス、実行するテストの選択によるテスト スイートの絞り込み、およびTestRunner オブジェクトの作成と設定によるテスト実行のカスタマイズができます。

  • 関数ベースのユニット テスト: 各ユニット テストを、テスト関数ファイル内にローカル関数として記述します。関数ベースのテストは、xUnit テストの原理を取り入れています。スクリプトベースのテストで提供される機能のサポートに加えて、関数ベースのテストでは充実したテスト オーサリング機能セットにアクセスできます。たとえば、制約、許容誤差、テスト診断などの高度な検定機能を使用できます。

  • クラス ベースのユニット テスト: 各ユニット テストを、クラス定義ファイル内に Test メソッドとして記述します。スクリプトベースのテストおよび関数ベースのテストで提供される機能のサポートに加えて、クラスベースのテストでは、いくつかの高度なテスト オーサリング機能が提供され、フレームワークのすべての機能にアクセスできます。たとえば、共有テスト フィクスチャの使用、テストのパラメーター化、およびテスト内容の再利用ができます。

Test authoring schemes in order of increasing functionality: script-based tests, function-based tests, and class-based tests

スクリプト ベースのユニット テスト

スクリプト ベースのテストでは、以下ができます。

  • テスト間で共有する変数、またはテストに必要な前提条件の定義。

  • 関数 assert を使用した基本的な検定の実行。たとえば、assert(isequal(actVal,expVal)) を使用して、実際の値と予期した値が等しいことをアサートできます (高度な検定機能は、関数ベースのテストとクラスベースのテストでのみサポートされます)。

  • フレームワークによって記録されたテスト診断へのアクセス。詳細については、テスト診断へのプログラムによるアクセスを参照してください (高度な診断アクションは、関数ベースのテストとクラスベースのテストでのみサポートされます)。

通常、スクリプトベースのテストでは、明示的に Test 要素のスイートを作成せずに、テスト ファイルを作成してそのファイル名を関数 runtests に渡します。明示的なテスト スイートを作成した場合 (関数 testsuite、またはmatlab.unittest.TestSuite クラスのメソッドを使用)、スクリプトベースのテストで使用可能な機能が追加されます。明示的なテスト スイートでは、以下ができます。

  • スイートの絞り込み。たとえば、matlab.unittest.selectors 名前空間のクラスを使用します。(いくつかのセレクターはクラスベースのテストにのみ適用可能です)。

  • TestRunner オブジェクトを作成して、テストを実行するためにそのオブジェクトをカスタマイズ。matlab.unittest.plugins 名前空間のプラグイン クラスをテスト ランナーに追加できます。

スクリプトベースのテストの詳細については、スクリプト ベースのユニット テストの記述スクリプトベースのテストの拡張を参照してください。

関数ベースのユニット テスト

関数ベースのテストは、スクリプトベースのテストが提供する機能をサポートします。さらに、関数ベースのテストでは、以下ができます。

関数ベースのテストの詳細については、関数ベースのユニット テストの記述関数ベースのテストの拡張を参照してください。

クラス ベースのユニット テスト

クラスベースのテストは、スクリプトベースのテストと関数ベースのテストが提供する機能をサポートします。さらに、クラスベースのテストでは、以下ができます。

  • セットアップ メソッドおよび破棄メソッドのブロックを使用して、環境のテスト前の状態を暗黙的にセットアップし、テストの実行後にシステムを元の状態に戻す。詳細については、クラスを使用するセットアップ コードと破棄コードの記述を参照してください。

  • クラス間でフィクスチャを共有する。詳細については、共有フィクスチャを使用するテストの記述を参照してください。

  • テストをカテゴリ別にグループ化してから、指定されたタグを使用してテストを実行する。詳細については、ユニット テストのタグ付けを参照してください。

  • 指定されたパラメーターのリストにあるテストを組み合わせて実行するパラメーター化テストを記述する。詳細については、クラスベースのテストでのパラメーターの使用を参照してください。

  • サブクラス化と継承を使用して、テスト内容の共有と再利用を行う。たとえば、サブクラスを派生させることにより、テスト クラスに定義されたパラメーターとメソッドを再利用できます。詳細については、クラスの階層 — 概念を参照してください。

クラスベースのテストの詳細については、MATLAB でのクラスベースのユニット テストの作成を参照してください。

ユニット テスト フレームワークの拡張

ユニット テスト フレームワークを使用すると、テスト ツールの作成者はカスタムの制約、診断、フィクスチャおよびプラグインによりテスト記述を拡張できます。たとえば、カスタム プラグインを作成して、スクリプトベース、関数ベースまたはクラスベースのユニット テストの実行時に使用することにより、テスト ランナーを拡張できます。詳細については、テスト フレームワークの拡張を参照してください。

関連するトピック

外部の Web サイト