Main Content

matlab.unittest.plugins.OutputStream クラス

パッケージ: matlab.unittest.plugins

テキスト出力の送信先を決定するインターフェイス

説明

OutputStream インターフェイスは、プラグインによるテキスト出力の送信先を指定する基本クラスとして使用できる抽象インターフェイス クラスです。カスタム出力ストリームを作成するには、テスト フレームワークが渡す書式設定済みテキスト情報を正しく処理する print メソッドを実装します。多くのテキスト指向プラグインは、OutputStream インスタンスを受け入れ、設定可能な方法でプラグインが生成したテキストをリダイレクトします。

matlab.unittest.plugins.OutputStream クラスは handle クラスです。

メソッド

すべて展開する

すべて折りたたむ

現在のフォルダーにあるファイルで、プラグイン出力を Figure にリダイレクトする ToFigure という名前のクラスを作成し、それを Figure 内のリスト ボックスに表示します。Figure およびリスト ボックスへのハンドルをそれぞれ表す Figure プロパティと ListBox プロパティを定義します。

classdef ToFigure < matlab.unittest.plugins.OutputStream
    
    properties(SetAccess = private)
        Figure
    end
    properties(Access = private)
        ListBox
    end

OutputStream のすべてのサブクラスに print メソッドを実装しなければなりません。この例では、メソッドが新規 Figure を作成し (必要な場合)、受信したテキストを書式設定した後、それを出力ストリームに追加します。

    methods
        function print(stream,formatSpec,varargin)
            % Create the figure
            if isempty(stream.Figure) || ~ishghandle(stream.Figure)
                stream.createFigure
            end
            newStr = sprintf(formatSpec,varargin{:});
            oldStr = strjoin(stream.ListBox.String','\n');
            
            % Create the full message
            fullStr = strjoin([oldStr,newStr]);
            fullStrArray = strsplit(fullStr,'\n','CollapseDelimiters',false);
            
            % Set the string and selection
            stream.ListBox.String = fullStrArray';
            stream.ListBox.Value = numel(fullStrArray);
            drawnow
        end
    end

private にアクセスできる methods ブロックで、プラグインによって使用される Figure およびリスト ボックスを作成する createFigure という名前のヘルパー メソッドを実装します。

    methods(Access = private)
        function createFigure(stream)
            stream.Figure = figure(...
                'Name',         'Unit Test Output',...
                'WindowStyle',  'docked');
            
            stream.ListBox = uicontrol(...
                'Parent',       stream.Figure,...
                'Style',        'listbox',...
                'String',       {},...
                'Units',        'normalized',...
                'Position',     [.05 .05 .9 .9],...
                'Max',          2, ...
                'FontName',     'Monospaced',...
                'FontSize',     13);
        end
    end
end

ToFigure クラスを保存します。次に、現在のフォルダーで、以下のテスト クラスを含む ExampleTest.m という名前のファイルを作成します。testOneverifyEqual 検定がテスト エラーの原因です。testTwo での検証はパスします。testThree に対応するテストは、出力を生成せずにパスします。

classdef ExampleTest < matlab.unittest.TestCase
    methods(Test)
        function testOne(testCase)  % Test fails
            testCase.verifyEqual(5,4,'Testing 5==4');
        end
        function testTwo(testCase)  % Test passes
            testCase.verifyEqual(5,5,'Testing 5==5');
        end
        function testThree(testCase)
            % test code
        end
    end
end

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

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

suite = testsuite('ExampleTest');

出力をコマンド ウィンドウに表示するテスト ランナーを作成します。

runner = TestRunner.withTextOutput;

DiagnosticsValidationPlugin インスタンスを作成して、その出力が ToFigure 出力ストリームを使用して Figure に送信されるよう明示的に指定します。

plugin = DiagnosticsValidationPlugin(ToFigure);

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

runner.addPlugin(plugin)
result = runner.run(suite);
Running ExampleTest

================================================================================
Verification failed in ExampleTest/testOne.

    ----------------
    Test Diagnostic:
    ----------------
    Testing 5==4

    ---------------------
    Framework Diagnostic:
    ---------------------
    verifyEqual failed.
    --> The values are not equal using "isequaln".
    --> Failure table:
                Actual    Expected    Error    RelativeError
                ______    ________    _____    _____________
            
                5         4           1        0.25         
    
    Actual Value:
             5
    Expected Value:
             4

    ------------------
    Stack Information:
    ------------------
    In C:\work\ExampleTest.m (ExampleTest.testOne) at 4
================================================================================
...
Done ExampleTest
__________

Failure Summary:

     Name                 Failed  Incomplete  Reason(s)
    ==================================================================
     ExampleTest/testOne    X                 Failed by verification.

テストの失敗時のみ画面に出力が生成されます。既定で、TestRunner.withTextOutputDiagnosticsOutputPlugin を使用して画面に出力を表示します。

画面上に表示される既定のテキスト出力に加え、DiagnosticsValidationPlugin の出力がドッキング状態の Figure に送信されます。Figure は、このテストを示します。

------------------------------
Validation of Test Diagnostic:
------------------------------
Testing 5==4
------------------------------
Validation of Test Diagnostic:
------------------------------
Testing 5==5

テストでエラー条件が発生するかどうかにかかわらず、DiagnosticsValidationPlugin は診断情報を表示します。

バージョン履歴

R2014a で導入