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

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

スタブ作成に関する問題

002_06 : テスト対象関数がファイル内スタティック変数を使っています。別ソースのスタブ関数からファイル内スタティック変数を操作するにはどうすれば良いですか?

【質問】
テスト対象関数がスタティック変数を使っています。スタブ関数からこのスタティック変数を操作したいのですが、テスト関数とスタブ関数はソースファイルが別であるため、スタブ関数からは、テスト対象関数のソースにあるスタティック関数にアクセスできません。どのようにすれば良いでしょうか?


【回答】
例えば以下の様なテスト対象関数test_sample()と、サブ関数sub_sample()があるとします。

 

----- source.c ----
static int val=0; // スタブソースAMSTB_SrcFile.cからはアクセスできない

void test_sample(void)
{
    val = 0; // 初期値

    sub_sample(); // サブ関数sub_sampleで、valが変化

    if( val = 0 )
    {
        分岐処理0
    }
    else
    {
        分岐処理1
    }
}

void test_sub(void)
{
    valを操作する処理
}

 

サブ関数のスタブ関数は、上記のsource.cとは別の AMSTB_SrcFile.c に作成されるため、ここからはスタティック変数valが参照できません。

そこで、スタティック変数valを間接的に参照する方法を採ります。手順は以下の様にします。

 

1)スタブ関数のソースファイル内に、「static int val」と同じ型のグローバル変数のポインタを作成します。
2)スタブ関数内でstatic int valを操作する代わりに、作成したポインタの実体を操作するコードを作成します。

 

--AMSTB_SrcFile.c--

int *ptr_val;

void AMSTB_test_sub(void)
{
    static int INPUT_param;   // CSVファイルからの入力変数を作成
    ptr_val[0] = INPUT_param; // 入力変数値をptr_val[0]にセット
}

 

3)テストCSVファイルの入力変数に、上で作成した「ptr_val」(CSV雛形作成画面で「アドレス設定」オプションで登録)と、「ptr_val[0]」(CSV雛形作成画面で「ポインタ添え字設定」オプションで登録)を登録します。
4)ptr_valのテストデータには、スタティック変数valのアドレス値を入力します。アドレス値はシンボル名で代用できますので、テストデータには「source.c/val」を指定します。これにより、テスト実行時には、スタブソースに作成した ptr_val にvalのアドレスが入り、ptr_val[0]はvalと同じメモリになります。

  ※ファイル内スタティック変数の書式は [ソースファイル名]/[変数名] です。

5)「INPUT_param」にはvalに与えたいテスト条件を入力します。

 

これにより、sub_sample()のスタブ関数実行時に、INPUT_param に与えたデータがptr_val[0]に代入されますが、ptr_val[0]はvalと同じメモリを指していますので、結果的にスタブ関数からvalの値を変更できます。

 

関連サポート情報検索

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

検索キーワード: ファイル内スタティック変数

他のキーワード検索


参考情報・リンク