[更新] トップの投稿で申し訳ありませんが、問題が変わる可能性があるため、最初にこれを知っておくと役立つ場合があります。
これ--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
リンカー オプションを使用してその関数をモックすることです。リンカがそれを拒否するのはなぜですか?