ホーム > ユーザーサポート > FAQ カバレッジマスターwinAMS
【質問】
テスト対象関数が同一のサブ関数を何度も呼び出す場合、戻り値などを呼び出し毎に変更したり、呼び出し毎に与えた引数を確認するには、スタブ関数をどのように作成すれば良いですか?
【テスト対象関数の例】
// sub_func()が2回呼ばれている場合
int a,b,c,d;
void func(int x)
{
a = sub_func(x); // 1回目
if ( a ) b++;
c = sub_func(b); // 2回目
if ( c ) d++;
}
【回答】
上記の様にsub_func()が2回呼ばれる場合、このスタブ関数各々の戻り値を設定するための変数(外部変数または関数内スタティック変数)と、渡された引数を格納するための配列を作成し、これらの配列をCSVファイルの入力/出力に指定します。例えば、下のようなスタブ関数を作成して、スタブ関数が呼ばれる毎に配列のインデックス番号(DBG_func_idx)がインクリメントされる様にすることで、呼び出し毎の戻り値の設定、渡された引数の出力が可能です。配列のインデクス数は、想定される呼び出し回数分を作成する必要があります。
【sub_func()の スタブ関数の例】
int DBG_func_arg[2]; /* 関数の引数保存域(2回分) */
int DBG_func_ret[2]; /* 関数の戻り値(2回分) */
int DBG_func_idx; /* 上記配列用のインデックス*/
int AMSTB_sub_func(int i)
{
DBG_func_arg[DBG_func_idx] = i; /* 引数を保存域に転送*/
return DBG_func_ret[DBG_func_idx++]; /* 指定の戻り値でリターン*/
}
この外部変数DBG_func_arg[]をテスト入力変数に、DBG_func_ret[]をテスト出力変数に指定します。
上の説明と、テストデータのイメージをまとめたPDFファイルを掲載しています。