アプリ版:「スタンプのみでお礼する」機能のリリースについて

C言語やC++言語でstaticなグローバル関数を作成することがあります。
これをテストコードから呼び出せるようにするにはどうしたらいいでしょうか。
元のソースには、できるだけ変更を加えたくありません

今はテスト対象のソースファイルを、
テストが書かれているソースファイルでincludeすることで呼び出せるようにしていますが
他にいい方法はないでしょうか

A 回答 (3件)

元のソースに手を加えたくないという事なら既に行われてるようにincludeするくらいしか手はないと思います。


あとはソース作成段階でテストできるような仕組みを用意しておくとか。
    • good
    • 1
この回答へのお礼

回答ありがとうございます。

ソース作成段階からテストの方法を考慮するのはやっぱり重要ですね。
staticを直接使用せず、MY_STATICのようなマクロを用意し、
本番ではstaticに、テスト段階ではexternに置換されるような方法を採用していたチームもありました。

元のソースにまったく手を入れないのではなく、
どの程度の変更ならどこまでテストできるのか、
というのも考えてみたいと思います。
# ほんの少しの変更で効率が大きく上がるなら、その方法を採用できるかもしれませんし。

お礼日時:2014/12/23 17:19

いまさらながら.



「テスト対象のソースファイル」のなかにテストコードを入れておく手もありますな. #2 はそれを意図してるかもしれん. とりあえず「テストが書かれているソースファイル」とバラバラになりえないというのは利点として考えられる. もちろん「ソースの変更」だけど最後に単純に追加するだけだから問題にはなりにくいと思う.
    • good
    • 0
この回答へのお礼

回答ありがとうございます。

テスト対象と一緒に、テストそのものを埋め込む方法もあるのですね。
網羅率や規模を算出する際、大変かもしれませんが、それも方法なのでしょうか。

これらを踏まえて、都合のいい方法を考えてみようと思います。

お礼日時:2015/01/13 23:46

取りあえず、オブジェクトファイルを作って、テストプログラムとリンクすれば良いと思います。

    • good
    • 0
この回答へのお礼

回答ありがとうございます。

もう少し詳しく書きます。
例えば、Func.cppファイルに以下のような関数が実装されているとします。

static int func(int a, int b)
{
  return a + b;
}


この関数をテストするために、
Test_Func.cppファイルに以下のようなテストコードを実装して、テストしたいのです。

void test_func()
{
  int v;
  v = func(10, 20);
  ASSERT(v == 30);
  v = func(0, 0);
  ASSERT(v == 0);
}


どのようにすればテストできるようになるのでしょうか。

お礼日時:2014/12/23 17:13

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!