Please note that the recommended version of Scilab is 2026.0.0. This page might be outdated.
See the recommended documentation of this function
assert_checkerror
命令が予測したエラーを発生することを確認する.
呼び出し手順
flag = assert_checkerror ( instr , expectedmsg ) flag = assert_checkerror ( instr , expectedmsg , expectederrnb ) flag = assert_checkerror ( instr , expectedmsg , expectederrnb , a1, ... ) [flag,errmsg] = assert_checkerror ( ... )
パラメータ
- instr:
- 1行1列の文字列行列, 評価する式 
- expectedmsg :
- 文字列または文字列ベクトル,生成するエラーメッセージ 
- expectederrnb :
- 1行1列のdouble,整数値,エラー番号の行列 (デフォルト: expectederrnb=[]). 
- a1 :
- msprintf関数に指定する, オプションのローカライズ用引数.
- flag :
- 1行1列の論理値行列,正しいエラーメッセージが生成された場合に %t , そうでない場合に %f 
- errmsg :
- 1行1列の文字列行列で,エラーメッセージ. flag==%t の場合, errormsg==""となります. flag==%f の場合, errmsgにはエラーメッセージが出力されます. 
説明
式がエラーを発生しない場合,
            assert_checkerror はエラーを発生します.
            評価された式が予想されたエラーメッセージを生成する場合,そのまま実行されます.
エラーメッセージexpectedmsgが指定され,
            空の行列 []でない場合,
            生成されたエラーメッセージが指定されたものに一致することが確認されます.
            エラー番号expectederrnbが指定され,
            空の行列 []でない場合,
            生成されたエラー番号が指定されたものに一致することが確認されます.
            エラーメッセージexpectedmsgおよび
            エラー番号 expectederrnbを
            同時に空の行列[]とすることはできません:
            少なくとも一つを指定する必要があります.
文字列の一致では文字列が厳密に等しいことが確認されます: パターンまたは正規表現は使用できません.
エラーメッセージが予測値と異なるか,エラー番号が異なる場合,
- errmsg出力変数が指定されない場合,エラーが生成され, 
- errmsg出力変数が指定される場合,エラーは生成されません. 
この関数の目的は,簡単なフレームワークによりエラーのケースを 確認できるようにすることです. ある関数のエラーメッセージを確認することには以下のような利点があります:
- 必要な時に正しいエラーが生成されることを確認する, 
- エラーメッセージが正しく整形されていることを確認する, 
- エラーメッセージが正しくローカライズされていることを確認する. 
予測されるメッセージをローカライズされたメッセージとすることができます.
            この場合,メッセージはgettext関数の出力と
            比較され,ローカルな言語に依存します.
            オプション引数a1をこの目的,
            例えばローカライズされたメッセージを整形するために,使用できます.
            全てのオプション引数
            a1,
            a2, ... は計算されたエラーメッセージと比較する前に自動的に
            msprintf関数に指定されます.
例
assert_checkerror関数を使用する複数の例を示します.
            まずテストする関数を定義する必要があります.
以下の関数fは,
            入力引数の数が間違っているかxの型が間違っている
            場合にエラーを発生します.
function y=f(x) [lhs, rhs] = argn() if ( rhs <> 1 ) then lstr = gettext("%s: Wrong number of input argument: %d expected.\n") errmsg = msprintf ( lstr , "f" , 1 ) error(errmsg) end if ( typeof(x) <> "constant" ) then lstr = gettext("%s: Wrong type for argument #%d: Matrix expected.\n") errmsg = msprintf ( lstr , "f" , 1 ) error(errmsg,123456789) end y = x endfunction
我々のタスクは,この関数により生成されたエラーメッセージを確認することです.
            以下の2つのテストをパスします:
            エラーメッセージが予測されたものである.
            ローカライズされたメッセージとオプションの
            パラメータ"f"(関数名)と
            1(入力引数の添字)のみを指定し,
            assert_checkerrorがローカライズ化を管理するようにします.
            これらの2つのオプションパラメータは,
            メッセージを整形し,
            "%s" および "%d" フォーマットを実際の値に変換する際に使用されます.
lcl1 = "%s: Wrong number of input argument: %d expected.\n"; assert_checkerror ( "y = f()" , lcl1 , [] , "f" , 1); lcl2 = "%s: Wrong type for argument #%d: Matrix expected.\n"; assert_checkerror ( "y = f(""a"")" , lcl2 , [] , "f" , 1);
ここで,カレントのロケール言語が英語であると仮定すると, 以下のコードを正しく使用できます. しかし,例えばカレントのロケールがフランス語である場合に失敗するため, これは推奨される手法ではありません.
assert_checkerror ( "y = f()" , "f: Wrong number of input argument: 1 expected." );
以下のテストでは, エラー番号も確認します.
lcl1="%s: Wrong number of input argument: %d expected.\n"; assert_checkerror ( "y=f()" , lcl1 , 10000 , "f" , 1); lcl2 = "%s: Wrong type for argument #%d: Matrix expected.\n"; assert_checkerror ( "y=f(""a"")" , lcl2 , 123456789 , "f" , 1);
以下の2つのテストは失敗します.
assert_checkerror ( "y = f()" , "oups" ); msg1 = msprintf(gettext("%s: Wrong number of input argument: %d expected.\n"), "f", 1); assert_checkerror ( "y = f()" , msg1 , 12 );
errmsgが出力引数に指定された場合,以下の例のように,エラーが生成されます.
            変数flag および errmsgの内容に
            注意してください.
// パスするテスト: flag は %t, errmsg は空 msg1 = msprintf(gettext("%s: Wrong number of input argument: %d expected.\n"), "f", 1); [flag, errmsg] = assert_checkerror ( "y = f()" , msg1 ) // 失敗するテスト: flag は %f, errmsg は空でない [flag, errmsg] = assert_checkerror ( "y = f()" , "oups" )
以下の2つのテストのメッセージはローカライズされており,
            カレントの言語が何であっても動作します.
            オプションのパラメータa1を使用する代わりに
            長くはなりますが,完全に有効なコードである
            ローカライズされたメッセージを直接使用します.
msg1 = msprintf(gettext("%s: Wrong number of input argument: %d expected.\n"), "f", 1); assert_checkerror ( "y = f()" , msg1 ); msg2 = msprintf(gettext("%s: Wrong type for argument #%d: Matrix expected.\n"), "f", 1); assert_checkerror ( "y = f(""a"")" , msg2 );
エラー番号を確認したいがエラーメッセージは確認したくない場合がありえます. 以下のスクリプトは, 最初の引数が doubleの行列でない場合に 生成されるエラー番号が 123456789 であることのみを 確認します: エラーメッセージは確認しません.
assert_checkerror("f(""foo"")", [], 123456789);
履歴
| バージョン | 記述 | 
| 5.4.0 | 関数が導入されました | 
| Report an issue | ||
| << assert_checkequal | Assert | assert_checkfalse >> |