Main Content

matlab.unittest.plugins.DiagnosticsRecordingPlugin クラス

パッケージ: matlab.unittest.plugins

テスト結果の診断を記録するプラグイン

説明

DiagnosticsRecordingPlugin は、ユニット テストからの診断情報へのプログラムによるアクセスを可能にします。

このクラスはテスト結果の診断を記録するプラグインを作成します。TestRunner は、診断を TestResult オブジェクトの Details プロパティの DiagnosticRecord 配列として記録します。DiagnosticRecord 配列の各要素は、個々のテストの 1 イベントに対応します。

関数 runtests、入力なしの関数 testrunnerTestSuite または TestCaserun メソッドを使用してテストを実行する場合、テスト フレームワークは既定でこのプラグインを使用します。関数 runperf または TimeExperimentrun メソッドを使用してパフォーマンス テストを実行した場合も、テスト フレームワークは既定でこのプラグインを使用します。

構築

matlab.unittest.plugins.DiagnosticsRecordingPlugin は、テスト結果の診断を記録するプラグインを作成します。既定では、DiagnosticsRecordingPlugin は検定エラーとログが作成されたイベントを記録します。

matlab.unittest.plugins.DiagnosticsRecordingPlugin(Name,Value) は、1 つ以上の Name,Value のペア引数で指定された追加オプションをもつプラグインを作成します。Name は一重引用符 ('') の中になければなりません。Name1,Value1,...,NameN,ValueN のように、複数の名前と値のペアの引数を任意の順番で指定できます。

入力引数

すべて展開する

名前と値の引数

引数のオプションのペアを Name1=Value1,...,NameN=ValueN として指定します。ここで Name は引数名で、Value は対応する値です。名前と値の引数は他の引数の後になければなりませんが、ペアの順序は重要ではありません。

R2021a より前では、コンマを使用してそれぞれの名前と値を区切り、Name を引用符で囲みます。

例: matlab.unittest.plugins.DiagnosticsRecordingPlugin('IncludingPassingDiagnostics',true) は検定エラーとログが作成されたイベントの診断に加えて、パスの診断を記録するプラグインを作成します。

パスしたテストの診断を記録するかどうか。false または true として指定します。既定では、プラグインはパスしたテストの診断を記録しません。

データ型: logical

記録する診断ログの最大レベル。0 ~ 4 の整数値または matlab.unittest.Verbosity 列挙型オブジェクトとして指定します。このプラグインは、このレベル以下でログが作成された診断情報を記録します。整数値は matlab.unittest.Verbosity 列挙型のメンバーに対応します。

既定で、プラグインは matlab.unittest.Verbosity.Terse レベル (レベル 1) でログに記録された診断を記録します。診断ログを除外するには、LoggingLevelVerbosity.None (レベル 0) に指定します。

診断ログとは、log (TestCase) メソッドまたは log (Fixture) メソッドの呼び出しによってテスト フレームワークに送る診断です。

数値表現列挙型メンバー名詳細レベルの説明
0None

情報なし

1Terse

最小限の情報

2Concise

中程度の情報量

3Detailed

ある程度の補足的な情報

4Verbose

多くの補足的な情報

記録するイベントの詳細レベル。0 ~ 4 の整数値または matlab.unittest.Verbosity 列挙型オブジェクトとして指定します。整数値は matlab.unittest.Verbosity 列挙型のメンバーに対応します。

プラグインは、パスしたイベント、失敗したイベント、およびログに記録されたイベントを、OutputDetail で指定された詳細レベルで記録します。既定で、プラグインはイベントを matlab.unittest.Verbosity.Detailed レベル (レベル 3) で記録します。

数値表現列挙型メンバー名詳細レベルの説明
0None

情報なし

1Terse

最小限の情報

2Concise

中程度の情報量

3Detailed

ある程度の補足的な情報

4Verbose

多くの補足的な情報

プロパティ

すべて展開する

このプロパティは読み取り専用です。

パスしたイベントの診断を記録するかどうかのインジケーター。false または true として返されます。このプロパティは既定で false です。作成時にこれを true として指定できます。

データ型: logical

このプロパティは読み取り専用です。

プラグインが記録する診断ログの最大詳細レベル。matlab.unittest.Verbosity 列挙型オブジェクトとして返されます。このプラグインは、このレベル以下でログが作成された診断情報を記録します。このプロパティの既定値は matlab.unittest.Verbosity.Terse です。プラグインの作成時に異なるログ レベルを指定できます。

診断ログとは、log (TestCase) メソッドまたは log (Fixture) メソッドの呼び出しによってテスト フレームワークに送る診断です。

このプロパティは読み取り専用です。

表示するイベントの詳細レベル。matlab.unittest.Verbosity 列挙型オブジェクトとして返されます。プラグインはパスしたイベント、失敗したイベント、およびログに記録されたイベントを、OutputDetail で指定された詳細レベルで表示します。このプロパティの既定値は matlab.unittest.Verbosity.Detailed です。プラグインの作成時に、異なる出力詳細を指定できます。

コピーのセマンティクス

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

すべて折りたたむ

作業フォルダーに、以下のテスト クラスを含む ExampleTest.m ファイルを作成します。このテストの目的は DiagnosticsRecordingPlugin プラグインの使用方法を説明することであり、代表的なユニット テストを示すことではありません。

classdef ExampleTest < matlab.unittest.TestCase  
    methods (Test)
        function testA(testCase)
            testCase.log(1,'Terse log message') 	% logs
            testCase.log(3,'Detailed log message') 	% logs
            testCase.verifyEqual(3+2,5)             % passes
            testCase.assumeTrue(true)               % passes
            testCase.verifyGreaterThan(5, 9)        % fails
            testCase.assertEqual(3.14,pi)           % fails/incomplete
        end
        function testB(testCase)
            % This test contains an intentional error - passing a character
            % instead of a variable to the ones function.
            a = [1 2];
            testCase.verifyEqual(ones('a'),[1 1]);  % errors
        end
    end
end

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

suite   = testsuite('ExampleTest');

プラグインなしでテスト ランナーを作成します。このコードはメッセージを表示しないランナーを作成し、インストールされたプラグインの完全な制御を可能にします。テスト ランナーに DiagnosticsRecordingPlugin を追加します。

import matlab.unittest.TestRunner;
import matlab.unittest.plugins.DiagnosticsRecordingPlugin;

runner = TestRunner.withNoPlugins;
runner.addPlugin(DiagnosticsRecordingPlugin);

テストを実行します。

results = runner.run(suite);

2 番目のテストの結果を表示します。テストは失敗し完了しません。

results(2)
ans = 

  TestResult with properties:

          Name: 'ExampleTest/testB'
        Passed: 0
        Failed: 1
    Incomplete: 1
      Duration: 7.8912e-04
       Details: [1×1 struct]

Totals:
   0 Passed, 1 Failed, 1 Incomplete.
   0.00078912 seconds testing time.

診断記録のインデックスを指定して、さらに情報を表示します。

results(2).Details.DiagnosticRecord
ans = 

  ExceptionDiagnosticRecord with properties:

                          Event: 'ExceptionThrown'
                     EventScope: TestMethod
                  EventLocation: 'ExampleTest/testB'
                      Exception: [1×1 MException]
    AdditionalDiagnosticResults: [1×0 matlab.unittest.diagnostics.DiagnosticResult]
                          Stack: [1×1 struct]
                         Report: 'Error occurred in ExampleTest/testB and it did not run to completion…'

テストはキャッチされていない例外をスローします。

最初のテスト testA の診断記録を収集します。

testA_records = results(1).Details.DiagnosticRecord
testA_records = 

  1×3 heterogeneous DiagnosticRecord (LoggedDiagnosticRecord, QualificationDiagnosticRecord) array with properties:

    Event
    EventScope
    EventLocation
    Stack
    Report

testA についてプラグインが記録したイベントを表示します。

{testA_records.Event}'
ans =

  3×1 cell array

    {'DiagnosticLogged'  }
    {'VerificationFailed'}
    {'AssertionFailed'   }

このプラグインは詳細レベル Terse でログが作成されたメッセージと、検証エラーおよびアサーション エラーを記録します。

すべての詳細レベルのメッセージを記録し、パスした診断を含めるプラグインを作成します。テストを再実行し、testA の診断記録を収集します。

runner = TestRunner.withNoPlugins;
runner.addPlugin(DiagnosticsRecordingPlugin(...
    'IncludingPassingDiagnostics',true,'OutputDetail',4,'LoggingLevel',4));
results = runner.run(suite);
testA_records = results(1).Details.DiagnosticRecord;

testA についてプラグインが記録したイベントを表示します。

{testA_records.Event}'
ans =

  6×1 cell array

    {'DiagnosticLogged'  }
    {'DiagnosticLogged'  }
    {'VerificationPassed'}
    {'AssumptionPassed'  }
    {'VerificationFailed'}
    {'AssertionFailed'   }

このプラグインは、すべての検定と log メソッドの呼び出しに関する診断情報を記録します。

失敗したイベントの診断記録をすべて選択します。

failedRecords = selectFailed(testA_records)
failedRecords = 

  1×2 QualificationDiagnosticRecord array with properties:

    Event
    EventScope
    EventLocation
    TestDiagnosticResults
    FrameworkDiagnosticResults
    AdditionalDiagnosticResults
    Stack
    Report

パスしたイベントの診断記録をすべて選択し、1 番目の記録のレポートを表示します。

passedRecords = selectPassed(testA_records);
passedRecords(1).Report
ans =

    'Verification passed in ExampleTest/testA.
     
         ---------------------
         Framework Diagnostic:
         ---------------------
         verifyEqual passed.
         --> The values are equal using "isequaln".
         
         Actual Value:
              5
         Expected Value:
              5
     
         ------------------
         Stack Information:
         ------------------
         In C:\work\ExampleTest.m (ExampleTest.testA) at 6'

未完了イベントの記録をすべて選択します。

incompleteRecords = selectIncomplete(testA_records)
incompleteRecords = 

  QualificationDiagnosticRecord with properties:

                          Event: 'AssertionFailed'
                     EventScope: TestMethod
                  EventLocation: 'ExampleTest/testA'
          TestDiagnosticResults: [1×0 matlab.unittest.diagnostics.DiagnosticResult]
     FrameworkDiagnosticResults: [1×1 matlab.unittest.diagnostics.DiagnosticResult]
    AdditionalDiagnosticResults: [1×0 matlab.unittest.diagnostics.DiagnosticResult]
                          Stack: [1×1 struct]
                         Report: 'Assertion failed in ExampleTest/testA and it did not run to completion…'

このイベントはアサーション エラーであるため、フレームワークはこの失敗の診断記録を failedRecords(2) でも返します。

ログが作成されたイベントをもつ記録すべてを選択して、ログが作成されたメッセージを表示します。

loggedRecords = selectLogged(testA_records);
{loggedRecords.Report}'
ans =

  2×1 cell array

    {'[Terse] Diagnostic logged (2018-04-12 13:15:23): Terse log message'      }
    {'[Detailed] Diagnostic logged (2018-04-12 13:15:23): Detailed log message'}

バージョン履歴

R2016a で導入