STUB()
- 38 -
実習3では、func3()を評価対象にします。入出力条件は、
入力変数: enable、mode (共に引数)
評価変数: gb_result.data、 gb_result.ret_code (共に外部変数構造体のメンバ) です。
この関数の途中には、関数呼出し(func3_sub_read_io())があります。呼び出し関数の戻り値は、一旦ローカル変数 retval に入りますが、これを使って、すぐ下の switch 文で分岐が行われています。func3()を網羅してカバレッジを 100%にするためには、この戻り値を switch 文の分岐に合わせて変える必要があります。
今回は、この呼び出し関数 func3_sub_read_io()のスタブ関数を作成して、テスト時に戻り値を自由に変化させるため に、入力 CSV ファイルに戻り値が設定できるようにスタブ関数の設計をします。
カバレッジマスターwinAMS のスタブ設定機能を使用して、func3_sub_read_io()のスタブ関数を作成します。
1. 「スタブ設定」のボタンを押します。
評価対象のスタブ対象を確認
スタブ関数の作成と指定
int func3_sub_read_io( int index ) {
// 戻り値がdata_tableに依存して複雑 if( data_table[index]>0x7f ) {
return data_table[index];
} else {
return -data_table[index];
} }
void func3( int enable, int mode ) {
int retval;
if( enable ) {
// スタブを作成して 戻り値を自由に設定する retval = func3_sub_read_io( mode );
// 戻り値を使って分岐 switch( retval ) {
case 0:
gb_result.data = 0;
break;
case 1:
gb_result.data = 50;
break;
case 2:
gb_result.data = 100;
break;
default:
gb_result.data = -1;
}
gb_result.ret_code = TRUE;
} else {
gb_result.data = 0;
gb_result.ret_code = FALSE;
} }
- 39 -
まず、設定の確認を行います。一番上にある項目「スタブプレフィックス:」とは、作成するスタブ関数の前に付ける 文字列の指定です。この場合は、func3_sub_read_io()の前に AMSTB_を付けた、AMSTB_ func3_sub_read_io()の関数 名のスタブ関数が作成されます。
すぐ下の「スタブ生成ソースファイル:」には、作成するスタブ関数を保存するソースファイルの指定を行います。上 図のようにファイル名が設定されていない場合は、「参照」ボタンを押して、ファイルパスを決定して下さい。
C:\winAMS_CM1\UnitTest を指定して、この中にスタブ関数のソースファイル「AMSTB_SrcFile.c」が出来るようにしま す。
では、スタブの作成を行います。
2. func3_sub_read_io を選択して 「スタブ生成」を押します。
これにより、スケルトンのスタブ関数「AMSTB_func3_sub_read_io」が別ファイル(AMSTB_SrcFile.c)に作成され、カバ レッジマスターのソースエディタが開きます。
このスタブ関数に、下図のコードを追加します。関数内に static 変数を作成して、これをそのままリターンするだけ のコードです。変数名は任意ですが、今回は「ret」とします。
このスタブ関数に作成した static 変数「ret」を、後で入力 CSV ファイルの入力変数に加えますが、こうすることで、こ のスタブ関数が呼ばれたときの戻り値を、CSV ファイルで予め決めておくことが出来るようになります。
カバレッジマスターの CSV ファイルで指定可能な変数は、関数が実行される前に、アドレスが確定している変数で す。このため、関数内に作成した変数を static にして、リンカにこの変数をアドレスの割り付けを行わせるようにしてい ます。static にしない場合は、実行時にスタックに生成されるローカル変数となり、CSV ファイルからデータを入力する ことはできません。
- 40 -
では、このスタブ関数を保存して、実行可能なコードにします。このために、実習の最初で使用したクロス開発環境 を使用します。(※本チュートリアルでは、ガイオ製のクロス開発環境を使用して説明しています。実際には、使用す る開発環境に合わせて、設定を行って下さい。)
3. ガイオ開発環境「フレームワーク」を起動します 。(※デスクトップに残っていない場合は、
C:\winAMS_CM1\UnitTest\target フォルダにある「SAMP1.gxp」を開いて下さい。)
4. プロジェクトビューの「ソースファイル」を右クリックして「プロジェクトへファイルを登録」を選択します 5. 「AMSTB_SrcFile.c」を登録します。
6. AMSTB_SrcFile.c には、コンパイルスイッチ(WINAMS_STUB)があるので、コンパイラの設定で有効にして 下さい。※実習の環境では事前に設定済みです。
7. 「ビルド」メニューから「リビルド」を選択してビルドします。 - 評価オブジェクトに 作成したスタブ部分 がコンパイル&リンクされます。
これにより、実行オブジェクトファイル「SAMP1.xlo」にスタブ関数が追加され、実行可能になりました。
では、前の実習と同様にして、func3()へのテスト入力データを CSV ファイルに作成します。func3()の入出力テスト 条件を確認します。func3()の入出力条件は、
入力変数: 引数 int enable, int mode
出力(評価)変数: グローバル変数 gb_result.data, gb_result.ret_code
です。これに、今回はスタブ関数の戻り値、ret を入力変数として追加します。CSV ファイル作成の手順は、実習1,
2と同様です。
1. 「テスト CSV 作成」のボタンを押します。
2. 「モジュールテスト用 CSV」を選択します。
3. ファイル名に「func3_data」、関数名に「func3」を指定します。
4. 下図の様に、上の入出力条件を INPUT、OUTPUT に指定します。