よくある質問(FAQ)

関数ポインタを含む関数を単体テストする場合、どのようにして関数のアドレスを指定すればよいですか?

テストCSVについて

質問

関数ポインタを含む関数の場合、処理関数のアドレスをテストケースとして入力したいのですが、関数のアドレスはリンク時に変わってしまう可能性があります。この場合、どのようにして関数のアドレスを指定すればよいですか?

/* テスト対象関数 */
int exec_func(int (*func)(void))
  int eRet = -1;
  if ( NULL != func )
  {
    eRet = (func)();
  }
  return eRet;
}

/* 関数ポインタで呼び出される関数 */
int subfunc(void)
{
  return 1;
}

回答

この関数の場合、「モジュールテスト用CSV雛型作成」画面にて、引数 func(ポインタ) を入力変数(INPUT)に追加します。その際、[アドレス設定]オプションを使用します。
テストデータには、関数 subfunc のアドレスを数値で直接指定するだけでなく、関数シンボル名である 「subfunc」 を記述することも可能です。