Main Content

matlab.unittest.plugins.DiagnosticsValidationPlugin クラス

パッケージ: matlab.unittest.plugins

診断コードの検証に役立つプラグイン

説明

DiagnosticsValidationPlugin は、診断コードの検証に役立つプラグインを作成します。

DiagnosticsValidationPluginTestRunner に追加して、ユーザー指定の診断が正しく実行されることを確認します。通常のテストではエラー条件がほとんど発生しないため、このプラグインは役に立ちます。エラーの結果、診断コードの一部が実行されないことがあります。この診断コード内にプログラミング エラーが存在する場合、テストが失敗しない限りエラーは明らかになりません。ただし、テスト プロセスのその時点で、そのエラー条件の診断は診断コードのエラーのため失われます。

このプラグインを使用すると、テストにパスするか失敗するかにかかわらず、テスト作成者によって指定された診断を無条件に評価することができます。この方法により、診断コードのすべてにプログラミング エラーがないことを確認できます。

診断解析はテストのパフォーマンスを低下させ、膨大なテキスト出力が生成されることがあります。このプラグインを日常的なテストに使用する前に、これらの影響を含めて検討してください。

構築

matlab.unittest.plugins.DiagnosticsValidationPlugin は、診断コードの検証に役立つプラグインを作成します。

matlab.unittest.plugins.DiagnosticsValidationPlugin(stream) は、すべてのテキスト出力を出力ストリーム stream にリダイレクトします。出力ストリームを指定しない場合、プラグインは既定の ToStandardOutput ストリームを使用します。

入力引数

stream

プラグインがテキスト出力を送る場所。OutputStream として指定します。

既定値: ToStandardOutput

コピーのセマンティクス

ハンドル。コピー操作に対するハンドル クラスの影響については、オブジェクトのコピーを参照してください。

すべて折りたたむ

作業フォルダーに、以下のテスト クラスを含む ExampleTest.m ファイルを作成します。この例では、testThree メソッドに意図的なエラーが含まれています。メソッドは関数 dir への関数ハンドルを FunctionHandleDiagnostic として使用する必要がありますが、dir のスペルが間違っています。

classdef ExampleTest < matlab.unittest.TestCase
    methods(Test)
        function testOne(testCase)
            % test code
        end
        function testTwo(testCase)
            % test code
        end
        function testThree(testCase)
            % The following should use @dir as a function handle,
            % but there is a typo
            testCase.verifyEqual('myfile','myfile', @dri)
        end
    end
end

ExampleTest.m のすべてのテストはパスになりますが、診断でエラーが発生します。

コマンド プロンプトで ExampleTest クラスからテスト スイートを作成します。

import matlab.unittest.TestRunner
import matlab.unittest.TestSuite
import matlab.unittest.plugins.DiagnosticsValidationPlugin

suite = TestSuite.fromClass(?ExampleTest);

テキスト出力を設定してテスト ランナーを作成します。

runner = TestRunner.withTextOutput;

テストを実行します。

result1 = runner.run(suite);
Running ExampleTest
...
Done ExampleTest
__________

すべてのテストにパスしたので、診断出力は表示されません。テスト フレームワークは、testThreeFunctionHandleDiagnostic でバグに遭遇しませんでした。

DiagnosticValidationPlugin をランナーに追加して、テストを実行します。

runner.addPlugin(DiagnosticsValidationPlugin)
result2 = runner.run(suite);
Running ExampleTest
..
------------------------------
Validation of Test Diagnostic:
------------------------------
Error occurred while capturing diagnostics:
Error using evalc
Undefined function or variable 'dri'.

Error in ExampleTest/testThree (line 12)
            testCase.verifyEqual('myfile','myfile', @dri);

.
Done ExampleTest
__________

フレームワークは、失敗したテストがなくても、FunctionHandleDiagnostic により提供される診断を実行します。このプラグインがないと、テスト フレームワークはテストに失敗した場合のみバグに遭遇します。