Main Content

このページの内容は最新ではありません。最新版の英語を参照するには、ここをクリックします。

matlab.unittest.constraints.Throws クラス

名前空間: matlab.unittest.constraints
スーパークラス: matlab.unittest.constraints.Constraint

関数が指定したエラーをスローするかどうかをテストする

説明

matlab.unittest.constraints.Throws クラスは、関数ハンドルが指定したエラーをスローするかどうかをテストする制約を提供します。

matlab.unittest.constraints.Throws クラスは handle クラスです。

作成

説明

c = matlab.unittest.constraints.Throws(identifier) は、関数ハンドルが identifier で指定したエラーをスローするかどうかをテストする制約を作成します。実際の値が、テスト フレームワークによって呼び出されたときに指定したエラーをスローする関数ハンドルであった場合に、制約は満たされます。

c = matlab.unittest.constraints.Throws(identifier,Name,Value) は、1 つ以上の名前と値の引数を使用してオプションを指定します。たとえば、c = matlab.unittest.constraints.Throws(identifier,"WhenNargoutIs",2) は、関数ハンドルが 2 つの出力引数を指定して呼び出されたときに指定したエラーをスローするかどうかをテストする制約を作成します。

入力引数

すべて展開する

エラー識別子。string スカラー、文字ベクトル、または meta.class インスタンスとして指定します。

identifiermeta.class インスタンスである場合、スローされたエラーが指定したクラスのインスタンスまたはそのサブクラスのインスタンスであれば、制約は満たされます。

この引数は ExpectedException プロパティを設定します。

例: "MATLAB:UndefinedFunction"

例: ?MException

名前と値の引数

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

例: c = matlab.unittest.constraints.Throws(identifier,WhenNargoutIs=2)

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

例: c = matlab.unittest.constraints.Throws(identifier,"WhenNargoutIs",2)

関数ハンドルを呼び出すときに制約が要求する出力数。非負の整数スカラーとして指定します。

この引数は Nargout プロパティを設定します。

データ型: double | single | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64

期待されるエラーの必要な原因。string 配列、文字ベクトルの cell 配列、または meta.class インスタンスの配列として指定します。関数ハンドルがエラーをスローしたときに、指定した原因のいずれかがない場合、制約は満たされません。

この引数は RequiredCauses プロパティを設定します。

必要な原因の集合を考慮に入れるかどうか。数値または logical 0 (false) または 1 (true) として指定します。値が true の場合、期待されるエラーに名前と値の引数 CausedBy で指定されていない原因が含まれているとき、制約は満たされません。既定では、制約は追加の原因を考慮しません。

この引数は RespectSet プロパティを設定します。

プロパティ

すべて展開する

期待されるエラーの識別子。文字ベクトルまたは meta.class インスタンスとして返されます。

このプロパティは入力引数 identifier によって設定されます。

属性:

GetAccess
public
SetAccess
immutable

関数ハンドルを呼び出すときに制約が要求した出力数。非負の整数スカラーとして返されます。

このプロパティは名前と値の引数 WhenNargoutIs によって設定されます。

属性:

GetAccess
public
SetAccess
private

期待されるエラーの必要な原因。文字ベクトルの cell 配列または meta.class インスタンスの配列として返されます。

このプロパティは名前と値の引数 CausedBy によって設定されます。

属性:

GetAccess
public
SetAccess
private

必要な原因の集合を考慮に入れるかどうか。データ型 logical0 または 1 として返されます。

このプロパティは名前と値の引数 RespectingSet によって設定されます。

属性:

GetAccess
public
SetAccess
private

すべて折りたたむ

実際の値が、指定されたエラーをスローする関数ハンドルであるかどうかをテストします。

最初に、この例で使用するクラスをインポートします。

import matlab.unittest.TestCase
import matlab.unittest.constraints.Throws

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

testCase = TestCase.forInteractiveUse;

関数 error が、期待される識別子のエラーをスローすることを検証します。

testCase.verifyThat(@() error("SOME:error:id","Error!"), ...
    Throws("SOME:error:id"))
Verification passed.

string の代わりに meta.class インスタンスを制約に渡して、もう一度テストします。テストはパスします。

testCase.verifyThat(@() error("SOME:error:id","Error!"), ...
    Throws(?MException))
Verification passed.

実際のエラーの識別子と期待されるエラーの識別子が一致しない場合にテストが失敗することを検証します。

testCase.verifyThat(@() error("SOME:error:id","Error!"), ...
    Throws("OTHER:error:id"))
Verification failed.
    ---------------------
    Framework Diagnostic:
    ---------------------
    Throws failed.
    --> The function threw the wrong exception.
        
        Actual Exception:
            'SOME:error:id'
        Expected Exception:
            'OTHER:error:id'
    --> Actual Error Report:
            Error using @()error("SOME:error:id","Error!")
            Error!
    
    Evaluated Function:
      function_handle with value:
    
        @()error("SOME:error:id","Error!")

関数 rand をテストします。rand はエラーをスローしないため、テストは失敗します。

testCase.verifyThat(@rand,Throws(?MException))
Verification failed.
    ---------------------
    Framework Diagnostic:
    ---------------------
    Throws failed.
    --> The function did not throw any exception.
        
        Expected Exception:
            ?MException
    
    Evaluated Function:
      function_handle with value:
    
        @rand

関数 disp は出力を返しません。1 つの出力引数を指定して disp を呼び出した場合に指定されたエラーがスローされることを検証します。

testCase.verifyThat(@() disp("Hello World!"), ...
    Throws("MATLAB:maxlhs","WhenNargoutIs",1))
Verification passed.

実際の値が関数ハンドルでない場合、Throws 制約が満たされないことを検証します。

testCase.verifyThat(5,Throws("SOME:error:id"))
Verification failed.
    ---------------------
    Framework Diagnostic:
    ---------------------
    Throws failed.
    --> The value must be an instance of the expected type.
        
        Actual Class:
            double
        Expected Type:
            function_handle
    
    Actual Value:
         5

Throws 制約を使用して、エラーの原因についてテストします。

最初に、この例で使用するクラスをインポートします。

import matlab.unittest.TestCase
import matlab.unittest.constraints.Throws

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

testCase = TestCase.forInteractiveUse;

2 つのエラー原因 cause1cause2 をもつ MException オブジェクト me を作成します。

me = MException("TOP:id","Top-Level Error!");
cause1 = MException("CAUSE1:id1","First Cause of Error!");
cause2 = MException("CAUSE2:id2","Second Cause of Error!");
me  = me.addCause(cause1);
me  = me.addCause(cause2);

フレームワークで me がスローされたときにその原因が cause1 であることを検証します。

testCase.verifyThat(@() me.throw,Throws("TOP:id","CausedBy","CAUSE1:id1"))
Verification passed.

原因を meta.class インスタンスとして指定して、もう一度テストします。テストはパスします。me に原因がない場合は、テストは失敗します。

testCase.verifyThat(@() me.throw,Throws("TOP:id","CausedBy",?MException))
Verification passed.

エラーに cause1 以外の原因がないかどうかをテストします。テストは、cause2 も期待されるエラーの原因であるために失敗します。

testCase.verifyThat(@() me.throw, ...
    Throws("TOP:id","CausedBy","CAUSE1:id1","RespectingSet",true))
Verification failed.
    ---------------------
    Framework Diagnostic:
    ---------------------
    Throws failed.
    --> The following causes were unexpectedly found in the exception tree:
        --> 'CAUSE2:id2'
    --> Actual Error Report:
            Error using @()me.throw
            Top Level Error!
            
            Caused by:
                First Cause of Error!
                Second Cause of Error!
    
    Actual Error Structure:
        ?MException 'TOP:id'
        --> ?MException 'CAUSE1:id1'
        --> ?MException 'CAUSE2:id2'
    
    Evaluated Function:
      function_handle with value:
    
        @()me.throw

指定した原因がエラーに属していない場合に、制約が満たされないことを検証します。

testCase.verifyThat(@() error("TOP:id","Top-Level Error!"), ...
    Throws("TOP:id","CausedBy","CAUSE1:id1"))
Verification failed.
    ---------------------
    Framework Diagnostic:
    ---------------------
    Throws failed.
    --> The following causes were not found in the exception tree:
        --> 'CAUSE1:id1'
    --> Actual Error Report:
            Error using @()error("TOP:id","Top-Level Error!")
            Top-Level Error!
    
    Actual Error Structure:
        ?MException 'TOP:id'
    
    Evaluated Function:
      function_handle with value:
    
        @()error("TOP:id","Top-Level Error!")

バージョン履歴

R2013a で導入