よくある質問(FAQ)

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

テストCSVについて

質問

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

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

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

回答

この関数の場合、CSV雛形作成画面にて入力変数(INPUT)に引数func(ポインタ)を「アドレス設定」のオプションを使って追加します。
テストデータには、関数subfuncのアドレスを直値で指定する方法の他に、呼び出される関数のシンボル名「subfunc」を記述することも可能です。