Main Content

verifyFail

クラス: matlab.unittest.qualifications.Verifiable
名前空間: matlab.unittest.qualifications

無条件の検証エラーの生成

説明

verifyFail(testCase) は無条件の検証エラーを生成します。

verifyFail(testCase,diagnostic) は、さらに diagnostic の診断情報を検定に関連付けます。

入力引数

すべて展開する

テスト ケース。matlab.unittest.qualifications.Verifiable オブジェクトとして指定します。matlab.unittest.TestCase クラスは matlab.unittest.qualifications.Verifiable をサブクラス化してそのメソッドを継承するため、testCase は通常 matlab.unittest.TestCase オブジェクトです。

検定にパスしたときか失敗したときに表示する診断情報。string 配列、文字配列、関数ハンドル、または matlab.automation.diagnostics.Diagnostic オブジェクトの配列として指定します。

テスト ランナーの構成に応じて、テスト フレームワークは検定にパスしたときまたは失敗したときに診断を表示できます。既定では、フレームワークは検定に失敗したときにのみ診断を表示します。この既定の動作はテスト ランナーをカスタマイズしてオーバーライドできます。たとえば、失敗したイベントとパスしたイベントの両方の診断を表示するには、DiagnosticsOutputPlugin インスタンスを使用します。

例: "My Custom Diagnostic"

例: @dir

属性

Sealedtrue

メソッドの属性の詳細については、メソッドの属性を参照してください。

すべて展開する

新機能に必要なすべてのテストを記述できない場合、まだ実装していないテスト用のプレースホルダーとして無条件テスト エラーを使用します。エラーにより、機能の開発に必要なテストが通知されます。

現在のフォルダー内のファイルに、FeatureTest クラスを作成します。verifyFail メソッドを使用して、新機能をテストする 2 つのプレースホルダーを追加します。

classdef FeatureTest < matlab.unittest.TestCase
    methods (Test)
        function defaultBehavior(testCase)
            testCase.verifyFail
        end
        function otherBehavior(testCase)
            testCase.verifyFail("Add code to test nondefault behavior.")
        end
    end
end

テストを実行すると、両方とも無条件で失敗します。

runtests("FeatureTest")
Running FeatureTest

================================================================================
Verification failed in FeatureTest/defaultBehavior.
    ------------------
    Stack Information:
    ------------------
    In C:\work\FeatureTest.m (FeatureTest.defaultBehavior) at 4
================================================================================
.
================================================================================
Verification failed in FeatureTest/otherBehavior.
    ----------------
    Test Diagnostic:
    ----------------
    Add code to test nondefault behavior.
    ------------------
    Stack Information:
    ------------------
    In C:\work\FeatureTest.m (FeatureTest.otherBehavior) at 7
================================================================================
.
Done FeatureTest
__________

Failure Summary:

     Name                         Failed  Incomplete  Reason(s)
    ==========================================================================
     FeatureTest/defaultBehavior    X                 Failed by verification.
    --------------------------------------------------------------------------
     FeatureTest/otherBehavior      X                 Failed by verification.

ans = 

  1×2 TestResult array with properties:

    Name
    Passed
    Failed
    Incomplete
    Duration
    Details

Totals:
   0 Passed, 2 Failed, 0 Incomplete.
   0.087462 seconds testing time.

verifyFail を使用すると、特定の条件でコードの一部が実行されないことを確認できます。たとえば、verifyFail への呼び出しをコールバック メソッド内に配置することにより、望んでいないこのコールバックを実行しようとすると検証エラーになります。

現在のフォルダー内のファイルに、イベントをもつハンドル クラスを作成します。

classdef MyHandle < handle
    events
        SomethingHappened
    end
end

現在のフォルダーに ListenerTest クラスを作成します。イベント ソースとイベントのリスナーを作成するコード、およびリスナー コールバックとして機能する補助メソッドを作成するコードを追加します。次に、イベントがトリガーされたときのコールバックの動作をテストする 2 つの Test メソッドを追加します。

classdef ListenerTest < matlab.unittest.TestCase
    properties
        Source
        Listener
    end

    methods (TestMethodSetup)
        function setup(testCase)
            % Create the event source
            testCase.Source = MyHandle;
            % Add a listener to test execution of the callback code
            testCase.Listener = testCase.Source.addlistener( ...
                "SomethingHappened",@testCase.forbiddenCallback);
            % Remove the listener after the test
            testCase.addTeardown(@delete,testCase.Listener)
        end
    end

    methods (Test)
        function passingTest(testCase)
            % Disable the listener
            testCase.Listener.Enabled = false;
            testCase.Source.notify("SomethingHappened")   % Callback does not run
        end
        function failingTest(testCase)
            % The listener is enabled by default
            testCase.Source.notify("SomethingHappened")   % Callback runs
        end
    end

    methods
        function forbiddenCallback(testCase,~,~)
            % Test fails unconditionally
            testCase.verifyFail("This callback must not run!")
        end
    end
end

テストを実行します。passingTest はリスナーを無効にしてイベントをトリガーします。そのためコールバックは実行されず、テストはパスします。ただし、failingTest がイベントをトリガーした場合は、forbiddenCallback が実行され、verifyFail によって生成されるエラーとなります。

runtests("ListenerTest")
Running ListenerTest
.
================================================================================
Verification failed in ListenerTest/failingTest.
    ----------------
    Test Diagnostic:
    ----------------
    This callback must not run!
    ------------------
    Stack Information:
    ------------------
    In C:\work\ListenerTest.m (ListenerTest.forbiddenCallback) at 34
    In C:\work\ListenerTest.m (@(varargin)testCase.forbiddenCallback(varargin{:})) at 13
    In C:\work\ListenerTest.m (ListenerTest.failingTest) at 27
================================================================================
.
Done ListenerTest
__________

Failure Summary:

     Name                      Failed  Incomplete  Reason(s)
    =======================================================================
     ListenerTest/failingTest    X                 Failed by verification.

ans = 

  1×2 TestResult array with properties:

    Name
    Passed
    Failed
    Incomplete
    Duration
    Details

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

ヒント

  • 検証検定を使用して、例外をスローせずにエラーを生成して記録します。検証では例外がスローされないため、すべてのテスト内容は検証エラーが発生しても最後まで実行されます。通常の場合、検証はテストを早期終了する必要がないため、ユニット テストの主な検定となります。前提条件の違反や不適切なテスト設定がないかどうかをテストするには、他の検定タイプを使用します。

    • テスト環境がテスト エラーを回避するために必要な前提条件を満たしていることを確認するには、仮定検定を使用してください。仮定エラーが発生するとテストのフィルター処理が行われ、テスト フレームワークによってテストが Incomplete としてマークされます。詳細については、matlab.unittest.qualifications.Assumable を参照してください。

    • エラー条件によって現在のテスト内容の残りが無効になっても、それ以降のテストは正しく実行される場合、アサーション検定を使用してください。アサーション地点におけるエラーによって、現在のテストが Failed および Incomplete となります。詳細については、matlab.unittest.qualifications.Assertable を参照してください。

    • エラーが発生した場合にテスト セッションを中止するには、致命的なアサーション検定を使用してください。これらの検定は、エラーがあまりに根本的なものであり、テストを続行する意義がない場合に役立ちます。致命的なアサーション検定は、フィクスチャの破棄で環境の状態が正しく復元されず、テストを中止して新しいセッションを開始する方が望ましい場合にも有益です。詳細については、matlab.unittest.qualifications.FatalAssertable を参照してください。

バージョン履歴

R2013a で導入