ホーム > ユーザーサポート > FAQ カバレッジマスターwinAMS

FAQ / カバレッジマスターwinAMS

スタブ作成に関する問題

301_04 : スタブ関数やダミー関数からテスト対象関数(別ファイル)のstatic変数を変更するには、どのようにすれば良いですか?

【質問】
スタブ関数を使用して、テスト対象関数のファイル内static変数を変更しようとしています。しかし、変数がstatic変数の場合、別ファイルにあるスタブ関数からテスト対象のstatic変数を変更する事が出来ません。どのようにすればファイル内static変数にスタブ関数からデータを入力できますか?

【回答】
ファイル内static変数は静的にアドレスを持っています。これを利用して、テスト用に新規に作成したポインタを介してファイル内static変数へのアクセスする方法を採ります。具体的には、以下の手順で行います。

1)入力したいstatic変数(下記例:static int staticValue)と同じ型のポインタ変数を、スタブソースファイル内にグローバル変数として新規に作成する(下記例:int *inputPointer)。

2)作成したポインタ変数(下記例:int *inputPointer)をCSVファイルファイルのINPUTに登録する。

3)各テストケースで、作成したポインタ変数の入力データ値として、入力したいstatic変数の「アドレス」を入力しする。テストケースにはアドレス値の代わりに、「シンボル名」(staticValue)を記述することができる。

4)スタブ関数内では、入力したいstatic変数の代わりに、作成したポインタ変数(下記例:inputPointer[0])にデータを入力する (下記例:inputPointer[0] = staticValue_data)

 

(例)

■main.c(テスト対象ファイル)


static int staticValue;      // ファイル内スタティック変数


// テスト対象関数
int ParentFunc(void){
  SubFunc();                 // スタブ関数内でstaticValueにテストデータを入力
  Output_Value = staticValue;
}


// サブ関数
int SubFunc(void){
  if(staticValue == 0) staticValue = 1;
  else                 staticValue = 0;
}



■AMSTB_SrcFile.c(スタブファイル)


int *inputPointer;           // main.c内のstaticValueへのアクセス用ポインタ変数
                             // staticValueを参照するようにテストデータを設定します
int staticValue_data;        // staticValueへ入力するテストデータ入力用の変数


// スタブ関数
int AMSTB_SubFunc(){
  inputPointer[0] = staticValue_data;  //ポインタを通してテストデータを入力
}

 


図:CSVファイルへの変数登録(クリックで拡大)

 


図:作成したポインタ変数に 入力先のstatic変数のアドレスを設定(クリックで拡大)

 

関連サポート情報検索

【サポート情報サイト内Google検索】

検索キーワード: static変数 | ダミー関数 | スタブ関数

他のキーワード検索

 


参考情報・リンク