Main Content

スクリプトベースのテストの拡張

通常、スクリプトベースのテストでは、明示的に一連の Test オブジェクトを作成せずに、テスト ファイルを作成してそのファイル名を関数 runtests へ渡します。明示的なテスト スイートを作成した場合は、スクリプトベースのテストで利用可能な機能が追加されます。これらの機能にはテストの選択と、プラグインを使用したテスト ランナーのカスタマイズが含まれます。追加機能については、関数ベースのユニット テストまたはクラス ベースのユニット テストの使用を検討してください。

テスト スイートの作成

スクリプトベースのテストからテスト スイートを直接作成するには、関数 testsuite を使用します。より明示的にテスト スイートを作成するには、TestSuitematlab.unittest.TestSuite.fromFile メソッドを使用します。これで、関数 runtests の代わりに run メソッドを使用してテストを実行できます。たとえば、ファイル rightTriTolTest.m 内にスクリプトベースのテストがある場合、次の 3 つの方法は同等です。

% Implicit test suite
result = runtests('rightTriTolTest.m');

% Explicit test suite
suite = testsuite('rightTriTolTest.m');
result = run(suite);

% Explicit test suite
suite = matlab.unittest.TestSuite.fromFile('rightTriTolTest.m');
result = run(suite);

また、matlab.unittest.TestSuite.fromFolder メソッドを使用して、指定したフォルダー内のすべてのテスト ファイルからテスト スイートを作成することもできます。スクリプトベースのテスト ファイル内にある特定のテストの名前がわかっている場合は、matlab.unittest.TestSuite.fromName を使用してそのテストからテスト スイートを作成できます。

テストの選択

明示的なテスト スイートでは、セレクターを使用してスイートを調整します。いくつかのセレクターはクラスベースのテストにのみ適用されますが、テスト名に基づいてスイートのテストを選択できます。

matlab.unittest.TestSuite.fromFile などのスイート生成メソッドでこれらの手法を使用するか、スイートを作成し、selectIf メソッドを使用してそれをフィルター処理します。たとえば、次のリストの 4 つの suite の値は等価です。

import matlab.unittest.selectors.HasName
import matlab.unittest.constraints.ContainsSubstring
import matlab.unittest.TestSuite.fromFile

f = 'rightTriTolTest.m';
selector = HasName(ContainsSubstring('Triangle'));

% fromFile, name-value pair
suite = TestSuite.fromFile(f,'Name','*Triangle*')

% fromFile, selector
suite = TestSuite.fromFile(f,selector)

% selectIf, name-value pair
fullSuite = TestSuite.fromFile(f);
suite = selectIf(fullSuite,'Name','*Triangle*')

% selectIf, selector
fullSuite = TestSuite.fromFile(f);
suite = selectIf(fullSuite,selector)

セレクターまたは名前と値のペアでスイート生成メソッドのいずれかを使用すると、テスト フレームワークはフィルター処理されたスイートを作成します。selectIf メソッドを使用すると、テスト フレームワークはテスト スイート全体を作成し、その後でフィルター処理します。大規模なテスト スイートでは、この手法はパフォーマンスに影響を及ぼす場合があります。

テスト診断へのプログラムによるアクセス

特定のクラスでは、フレームワークのテストは DiagnosticsRecordingPlugin プラグインを使用して、テスト結果の診断を記録します。以下のいずれかを実行した場合、フレームワークでは既定でプラグインが使用されます。

  • 関数 runtests を使用してテストを実行する。

  • 入力なしで関数 testrunner を使用してテストを実行する。

  • TestSuite または TestCase クラスの run メソッドを使用してテストを実行する。

  • 関数 runperf を使用してパフォーマンス テストを実行する。

  • TimeExperiment クラスの run メソッドを使用してパフォーマンス テストを実行する。

テストを実行した後、TestResult オブジェクトの Details プロパティの DiagnosticRecord フィールドを使用して、記録された診断にアクセスできます。たとえば、テスト結果が変数 results に保存されている場合、result(2).Details.DiagnosticRecord にはスイート内の 2 番目のテストの記録された診断が含まれます。

記録された診断は DiagnosticRecord オブジェクトです。テストの特定のタイプのテスト診断にアクセスするには、DiagnosticRecord クラスの selectFailedselectPassedselectIncompleteselectLogged の各メソッドを使用します。

既定では、DiagnosticsRecordingPlugin プラグインは、検定エラーと、詳細レベル matlab.unittest.Verbosity.Terse でロギングされたイベントを記録します。詳細については、DiagnosticsRecordingPluginDiagnosticRecord を参照してください。

テスト ランナーのカスタマイズ

フレームワークがテスト スイートを実行する方法をカスタマイズするには、TestRunner オブジェクトを使用します。TestRunner オブジェクトを使用すると、次のことが可能です。

  • withNoPlugins メソッドを使用して、コマンド ウィンドウで出力を生成しない。

  • runInParallel メソッドを使用してテストを並列実行する。

  • addPlugin メソッドを使用してプラグインをテスト ランナーに追加する。

たとえば、テスト スイート suite を使用してサイレント テスト ランナーを作成し、TestRunnerrun メソッドを使用してテストを実行します。

runner = matlab.unittest.TestRunner.withNoPlugins;
results = runner.run(suite);

プラグインを使用してテスト ランナーをさらにカスタマイズします。たとえば、出力のリダイレクト、コード カバレッジの判定、または警告に対するテスト ランナーの応答方法の変更を行うことができます。詳細については、テスト ランナーへのプラグインの追加および plugins クラスを参照してください。

参考

| | | |

関連するトピック