Main Content

onFailure

クラス: matlab.unittest.fixtures.Fixture
名前空間: matlab.unittest.fixtures

フィクスチャのセットアップおよび破棄におけるエラーの診断情報を動的に追加する

説明

onFailure(fixture,failureDiag) は、フィクスチャのセットアップ ルーチンおよび破棄ルーチンにおけるエラーの診断情報を追加します。テスト フレームワークでエラーが発生した場合、診断を実行します。既定では、検証エラー、アサーション エラー、致命的なアサーション エラー、およびキャッチされていない例外の発生時に、これらの診断が実行されます。

onFailure(fixture,failureDiag,'IncludingAssumptionFailures',tf) は、テスト フレームワークで仮定エラーが発生した場合も診断を実行するかどうかを示します。仮定エラーの発生時にも診断を実行するには、tftrue に設定します。

入力引数

すべて展開する

フィクスチャのインスタンス。matlab.unittest.fixtures.Fixture として指定します。

エラーの発生時に表示する診断情報。文字ベクトル、string 配列、関数ハンドル、または matlab.automation.diagnostics.Diagnostic インスタンスの配列として指定します。

例: @() disp('Failure Detected')

例: matlab.unittest.diagnostics.ScreenshotDiagnostic

仮定エラーへの反応。false (logical の 0) または true (logical の 1) として指定します。この既定値は false で、テスト フレームワークは、検証エラー、アサーション エラー、致命的なアサーション エラー、およびキャッチされていない例外の発生時に診断を実行します。ただし、フレームワークは仮定エラーの発生時に診断を実行しません。仮定エラーの発生時に追加の診断を実行するには、この値を true に指定します。

すべて展開する

現在の作業フォルダー内に FormatHexFixture フィクスチャを作成します。テスト フレームワークでフィクスチャのセットアップ中にアサーション エラーが発生し、エラー発生時に診断メッセージを表示します。

classdef FormatHexFixture < matlab.unittest.fixtures.Fixture
    properties (Access=private)
        OriginalFormat
    end
    methods
        function setup(fixture)
            fixture.OriginalFormat = format().NumericFormat;
            format("hex")
            fixture.addTeardown(@format,fixture.OriginalFormat)
            
            fixture.onFailure(['Failure detected in ' mfilename("class")])
            fixture.assertEqual(format().NumericFormat,"short")
        end
    end
end

現在の作業フォルダー内に次のテスト クラス SampleTest.m を作成します。

classdef SampleTest < matlab.unittest.TestCase
    methods (Test)
        function test1(testCase)
            testCase.applyFixture(FormatHexFixture);
            actStr = getColumnForDisplay([1;2;3], 'Small Integers');
            expStr = ['Small Integers  '
                '3ff0000000000000'
                '4000000000000000'
                '4008000000000000'];
            testCase.verifyEqual(actStr, expStr)
        end
    end
end

function str = getColumnForDisplay(values, title)
elements = cell(numel(values)+1, 1);
elements{1} = title;
for idx = 1:numel(values)
    elements{idx+1} = displayNumber(values(idx));
end
str = char(elements);
end

function str = displayNumber(n)
str = strtrim(evalc('disp(n);'));
end

テストを実行します。onFailure 診断は見出し "Additional Diagnostics" の下に表示されます。

results = runtests('SampleTest');
Running SampleTest

================================================================================
Assertion failed in SampleTest/test1 and it did not run to completion.
    ---------------------
    Framework Diagnostic:
    ---------------------
    assertEqual failed.
    --> The strings are not equal.
    
    Actual Value:
        "hex"
    Expected Value:
        "short"
    ----------------------
    Additional Diagnostic:
    ----------------------
    Failure detected in FormatHexFixture
    ------------------
    Stack Information:
    ------------------
    In C:\work\FormatHexFixture.m (FormatHexFixture.setup) at 12
================================================================================
.
Done SampleTest
__________

Failure Summary:

     Name              Failed  Incomplete  Reason(s)
    ============================================================
     SampleTest/test1    X         X       Failed by assertion.

バージョン履歴

R2017b で導入

すべて展開する