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(
は、1 つ以上の名前と値の引数を使用してオプションを指定します。たとえば、identifier
,Name,Value
)c = matlab.unittest.constraints.Throws(identifier,"WhenNargoutIs",2)
は、関数ハンドルが 2 つの出力引数を指定して呼び出されたときに指定したエラーをスローするかどうかをテストする制約を作成します。
入力引数
エラー識別子。string スカラー、文字ベクトル、または matlab.metadata.Class
インスタンスとして指定します。
identifier
が matlab.metadata.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 配列、または matlab.metadata.Class
インスタンスの配列として指定します。関数ハンドルがエラーをスローしたときに、指定した原因のいずれかがない場合、制約は満たされません。
この引数は RequiredCauses
プロパティを設定します。
必要な原因の集合を考慮に入れるかどうか。数値または logical 0
(false
) または 1
(true
) として指定します。値が true
の場合、期待されるエラーに名前と値の引数 CausedBy
で指定されていない原因が含まれているとき、制約は満たされません。既定では、制約は追加の原因を考慮しません。
この引数は RespectSet
プロパティを設定します。
プロパティ
期待されるエラーの識別子。文字ベクトルまたは matlab.metadata.Class
インスタンスとして返されます。
このプロパティは入力引数 identifier
によって設定されます。
属性:
GetAccess | public |
SetAccess | immutable |
関数ハンドルを呼び出すときに制約が要求した出力数。非負の整数スカラーとして返されます。
このプロパティは名前と値の引数 WhenNargoutIs
によって設定されます。
属性:
GetAccess | public |
SetAccess | private |
期待されるエラーの必要な原因。文字ベクトルの cell 配列または matlab.metadata.Class
インスタンスの配列として返されます。
このプロパティは名前と値の引数 CausedBy
によって設定されます。
属性:
GetAccess | public |
SetAccess | private |
必要な原因の集合を考慮に入れるかどうか。データ型 logical
の 0
または 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 の代わりに matlab.metadata.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 つのエラー原因 cause1
と cause2
をもつ 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.
原因を matlab.metadata.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 で導入
MATLAB Command
You clicked a link that corresponds to this MATLAB command:
Run the command by entering it in the MATLAB Command Window. Web browsers do not support MATLAB commands.
Web サイトの選択
Web サイトを選択すると、翻訳されたコンテンツにアクセスし、地域のイベントやサービスを確認できます。現在の位置情報に基づき、次のサイトの選択を推奨します:
また、以下のリストから Web サイトを選択することもできます。
最適なサイトパフォーマンスの取得方法
中国のサイト (中国語または英語) を選択することで、最適なサイトパフォーマンスが得られます。その他の国の MathWorks のサイトは、お客様の地域からのアクセスが最適化されていません。
南北アメリカ
- América Latina (Español)
- Canada (English)
- United States (English)
ヨーロッパ
- Belgium (English)
- Denmark (English)
- Deutschland (Deutsch)
- España (Español)
- Finland (English)
- France (Français)
- Ireland (English)
- Italia (Italiano)
- Luxembourg (English)
- Netherlands (English)
- Norway (English)
- Österreich (Deutsch)
- Portugal (English)
- Sweden (English)
- Switzerland
- United Kingdom (English)