Для проверки указатель на функцию указывает на адрес функции. CMockery
Я пишу модульный тест и мне интересно, как бы я тестировал указатели на функции с помощью Cmockery.
File A.c
void (*FunctionPtr)(void) = &funcA;
void funcA()
{
//calls func B
funcB();
}
TestA.c
void Test_A( void ** state )
{
/// test for FunA
// working as expected
}
void Test_FunctionPtr( void** state )
{
/// how to check here that FunctionPtr holds memory location of funcA
// I tried something like below
assert_memory_equal( FunctionPtr, funcA(), sizeof( funcA() ) );
}
Во время выполнения я получаю сообщение об ошибке, и я понятия не имею, как ее устранить. Может быть, я использую неправильный API, чтобы утверждать, но не знаю, какой позвонить. Ниже моя ошибка
ошибка во время выполнения:
Test_FunctionPtr: запуск теста Нет записей для символа funcB.
1 ответ
funcA()
вызывает функцию. Вы хотите указатель на функцию, которая funcA
или же &funcA
(не имеет значения, какой вы используете: читайте здесь).
Также вы хотите сравнить значение, сохраненное в FunctionPtr
с адресом funcA
, Вы не хотите сравнивать память где FunctionPtr
указывает на с функцией.
Так что вместо assert_memory_equal( FunctionPtr, funcA(), sizeof( funcA() ) );
я хотел бы использовать assert(FunctionPtr == funcA);
Вы написали в своем комментарии, что вы используете assert_int_equal
сейчас. Обратите внимание, что оба значения не являются int
, так что если макрос использует printf
с %d
(или аналогичный) в случае ошибки вы вызываете неопределенное поведение.