5

[更新] トップの投稿で申し訳ありませんが、問題が変わる可能性があるため、最初にこれを知っておくと役立つ場合があります。

これ--wrapはリンカのオプションであり、リンカのオプションではありldませんgcc

しかし、私のEclipseプロジェクトはgccリンク段階に使用しています。

cmocka単体テストの必要に応じて、ラップ関数を使用するにはどうすればよいですか?


を使用してgcc (Ubuntu/Linaro 4.6.3-1ubuntu5) 4.6.3います。

cmockaを使用して C コードの単体テストを行うために、ここ--wrapで指定されているリンカー オプションを使用しようとしています。

エラーは

make all 
Building target: unit_test_C_code_example_project
Invoking: GCC C Linker
gcc --wrap=add -o "unit_test_C_code_example_project"  ./test_scripts/test_maths.o  ./software_under_test/mocks/mock_add.o  ./software_under_test/maths.o   -lcmocka
gcc: error: unrecognized option ‘--wrap=add’
make: *** [unit_test_C_code_example_project] Error 1

そのため、リンカーはオプションについて不平を言ってい--wrap=addますが、その理由はわかりません。


必然的に、コードを投稿しないと、誰かがそれを要求するので、リンカー オプションの問題との関連性が疑わしいとはいえ、ここに掲載します。

私の単体テストのメインでは、

static void test_multiply_two_by_three(void **state)
{
    will_return(__wrap_add(0, 2), 2);
    will_return(__wrap_add(2, 2), 4);
    will_return(__wrap_add(4, 2), 6);

    assert_int_equal(multiply(2, 3), 6);
}

別のファイルで、モック関数を宣言します

int __wrap_add(int a, int b)
{
    return mock();
}

そして、テスト対象のソフトウェアでは、ラップされる関数が呼び出されます

int multiply(int x, int y)
{
    int total = 0;
    int i;

    for (i = 0; i < y; i++)
        total += add(total, x);

    return total;
}

add()ビルドのどこにも関数が呼び出されないことに注意してください。私が達成しようとしているのは、__wrap_addリンカー オプションを使用してその関数をモックすることです。リンカがそれを拒否するのはなぜですか?

4

1 に答える 1