[Обновление] Извините за публикацию вверху, но может быть полезно сначала узнать об этом, так как это, вероятно, меняет проблему.
--wrap
является опцией компоновщика ld
, а не gcc
.
Но мой проект Eclipse использует gcc
для этапа ссылки.
Как я могу использовать функции переноса, необходимые для cmocka
модульного тестирования?
Я использую gcc (Ubuntu/Linaro 4.6.3-1ubuntu5) 4.6.3
.
Я пытаюсь использовать параметр компоновщика --wrap
, как указано здесь, чтобы использовать cmocka для модульного тестирования кода C.
Ошибка
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
. Почему компоновщик отклоняет его?