2

C ファイルにいくつかの静的関数が含まれていますが、Google テストを使用してこれらの静的関数をテストするにはどうすればよいですか?

ヘッダファイル:

test.h
int accessData();

ソースファイル:

test.c
static int value;
static int getData()
{
   return value;
}

int accessData()
{
    if(value != 0)
    {
       return getData();
    }
    return 0;
}

静的関数はグローバル関数によって呼び出されますが、Google テストを使用してこれらの静的関数をテストするにはどうすればよいですか?

4

3 に答える 3

5

これを実現する 1 つの方法は#include、C ソース ファイルをテスト ソースに追加することです。次に、static関数はテスト コードと同じ翻訳単位の一部であり、そこから呼び出すことができます。

#include "test.c"

/* here follow the tests of getData() */

これの欠点は、test.cビルド時間に明らかな影響を与えて、すべてが再度コンパイルされることです。それが問題になる場合は、テストする静的関数を独自のソース ファイルに抽出することを検討してください (たとえばtest_p.c_pprivate/internal という意味で)。次に、ユニットテストの#include "test_p.c"両方から。test.c

于 2015-08-19T12:04:26.033 に答える
-2

関数のstatic可視性は、翻訳単位に制限されています。

私の知る限り、googletestの場合、.で書かれたテストコードを連結した別のテストファイルからテスト中の関数を呼び出す必要がありますTEST(). テスト対象の関数が の場合、 MACRO 呼び出しstaticから直接テストすることはできません。TEST()

static直接的なアプローチは、テスト目的で関数の修飾子をコメントアウトすることです。

于 2015-08-19T11:57:58.940 に答える