- ベストアンサー
staticな関数をテストする方法について
C言語やC++言語でstaticなグローバル関数を作成することがあります。 これをテストコードから呼び出せるようにするにはどうしたらいいでしょうか。 元のソースには、できるだけ変更を加えたくありません 今はテスト対象のソースファイルを、 テストが書かれているソースファイルでincludeすることで呼び出せるようにしていますが 他にいい方法はないでしょうか
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
元のソースに手を加えたくないという事なら既に行われてるようにincludeするくらいしか手はないと思います。 あとはソース作成段階でテストできるような仕組みを用意しておくとか。
その他の回答 (2)
- Tacosan
- ベストアンサー率23% (3656/15482)
いまさらながら. 「テスト対象のソースファイル」のなかにテストコードを入れておく手もありますな. #2 はそれを意図してるかもしれん. とりあえず「テストが書かれているソースファイル」とバラバラになりえないというのは利点として考えられる. もちろん「ソースの変更」だけど最後に単純に追加するだけだから問題にはなりにくいと思う.
お礼
回答ありがとうございます。 テスト対象と一緒に、テストそのものを埋め込む方法もあるのですね。 網羅率や規模を算出する際、大変かもしれませんが、それも方法なのでしょうか。 これらを踏まえて、都合のいい方法を考えてみようと思います。
- suzukiswift
- ベストアンサー率23% (4/17)
取りあえず、オブジェクトファイルを作って、テストプログラムとリンクすれば良いと思います。
お礼
回答ありがとうございます。 もう少し詳しく書きます。 例えば、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); } どのようにすればテストできるようになるのでしょうか。
お礼
回答ありがとうございます。 ソース作成段階からテストの方法を考慮するのはやっぱり重要ですね。 staticを直接使用せず、MY_STATICのようなマクロを用意し、 本番ではstaticに、テスト段階ではexternに置換されるような方法を採用していたチームもありました。 元のソースにまったく手を入れないのではなく、 どの程度の変更ならどこまでテストできるのか、 というのも考えてみたいと思います。 # ほんの少しの変更で効率が大きく上がるなら、その方法を採用できるかもしれませんし。