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:
5Throws 制約を使用して、エラーの原因についてテストします。
最初に、この例で使用するクラスをインポートします。
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)