Main Content

verifyWarning

クラス: matlab.unittest.qualifications.Verifiable
パッケージ: matlab.unittest.qualifications

関数が指定された警告を表示することを検証する

説明

verifyWarning(testCase,actual,identifier) は、actualidentifier で指定された警告を表示する関数ハンドルであることを検証します。

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

[output1,...,outputN] = verifyWarning(___) は、関数ハンドルが呼び出されるときに生成されるすべての出力も返します。前述の構文にある任意の入力引数を組み合わせて使用できます。

入力引数

すべて展開する

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

テストする値。任意のデータ型の値として指定します。任意のデータ型の値を指定できますが、actual が関数ハンドルではない場合、テストは失敗します。

例: @() myFunction(1,2)

例: @() mkdir("myFolder")

警告識別子。文字ベクトル、文字ベクトルの cell 配列、または string 配列として指定します。

例: "MATLAB:MKDIR:DirectoryExists"

例: ["MyComponent:FirstID" "MyComponent:SecondID"]

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

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

例: "My Custom Diagnostic"

例: @dir

属性

Sealedtrue

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

すべて展開する

関数 mkdir を既存フォルダーの作成に使用した場合、指定された警告が発行されることを検証します。

この例では、現在のフォルダーに myFolder という名前のサブフォルダーがあると仮定しています。サブフォルダーが存在しない場合は作成します。

if ~isfolder("myFolder")
    mkdir myFolder
end

myFolder をもう一度作成しようとすると、mkdir は警告を発行します。警告識別子が返されます。

mkdir myFolder
Warning: Directory already exists.
[~,identifier] = lastwarn
identifier = 
'MATLAB:MKDIR:DirectoryExists'

ここで、対話型テスト用にテスト ケースを作成します。関数 mkdir が既存フォルダーの作成に呼び出された場合、警告を発し、その警告には識別子 "MATLAB:MKDIR:DirectoryExists" があることを検証します。

testCase = matlab.unittest.TestCase.forInteractiveUse;
verifyWarning(testCase,@() mkdir("myFolder"),"MATLAB:MKDIR:DirectoryExists")
Verification passed.

実際の値が、指定された警告を発行する関数ハンドルであるかをテストします。

対話型テスト用にテスト ケースを作成します。

testCase = matlab.unittest.TestCase.forInteractiveUse;

関数 warning が、期待される識別子の警告を発行することを検証します。

verifyWarning(testCase,@() warning("SOME:warning:id","Warning!"), ...
    "SOME:warning:id")
Verification passed.

"OTHER:warning:id" を期待される警告識別子に指定し、テストを繰り返します。テストは失敗します。

verifyWarning(testCase,@() warning("SOME:warning:id","Warning!"), ...
    "OTHER:warning:id","Warning identifiers must match.")
Warning: Warning! 
Verification failed.
    ----------------
    Test Diagnostic:
    ----------------
    Warning identifiers must match.
    ---------------------
    Framework Diagnostic:
    ---------------------
    verifyWarning failed.
    --> The function handle did not issue the expected warning(s).
        
        Actual Warning(s):
            --> 'SOME:warning:id'
        Expected Warning(s):
            --> 'OTHER:warning:id'
    
    Evaluated Function:
      function_handle with value:
    
        @()warning("SOME:warning:id","Warning!")
    ------------------
    Stack Information:
    ------------------
    In C:\work\TestForSpecifiedWarningsExample.m (TestForSpecifiedWarningsExample) at 21

関数 rand をテストして、関数の出力も調べます。rand は警告を発行しないため、テストは失敗します。

r = verifyWarning(testCase,@rand,"SOME:warning:id")
Verification failed.
    ---------------------
    Framework Diagnostic:
    ---------------------
    verifyWarning failed.
    --> The function handle did not issue any warnings.
        
        Expected Warning(s):
            --> 'SOME:warning:id'
    
    Evaluated Function:
      function_handle with value:
    
        @rand
    ------------------
    Stack Information:
    ------------------
    In C:\work\TestForSpecifiedWarningsExample.m (TestForSpecifiedWarningsExample) at 27

r =

    0.8147

実際の値が関数ハンドルでない場合、テストが失敗することを検証します。

verifyWarning(testCase,5,"SOME:warning:id")
Verification failed.
    ---------------------
    Framework Diagnostic:
    ---------------------
    verifyWarning failed.
    --> The value must be an instance of the expected type.
        
        Actual Class:
            double
        Expected Type:
            function_handle
    
    Actual Value:
         5
    ------------------
    Stack Information:
    ------------------
    In C:\work\TestForSpecifiedWarningsExample.m (TestForSpecifiedWarningsExample) at 31

ヒント

  • verifyWarning は便利なメソッドです。たとえば、verifyWarning(testCase,actual,identifier) は、以下のコードと機能的に等価です。

    import matlab.unittest.constraints.IssuesWarnings
    testCase.verifyThat(actual,IssuesWarnings(cellstr(identifier)))
    

    verifyThat を介して IssuesWarnings 制約を直接使用した場合、さらに多くの機能が使用できます。

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

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

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

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

バージョン履歴

R2013a で導入