3

我正在编写单元测试,想知道如何使用 Cmockery 测试函数指针。

交流电

void (*FunctionPtr)(void) = &funcA;

void funcA()
{
  // calls func B 
  funcB();
}

测试A.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 来断言,但不知道该调用哪一个。

以下是我的错误:

error during runtime:      
Test_FunctionPtr: Starting test
No entries for symbol funcB.
4

1 回答 1

2

funcA()调用函数。您想要一个指向函数的指针,它是funcAor &funcA(与您使用哪个没有区别:请阅读此处)。

您还想将保存的值FunctionPtrfuncA. 您不想将FunctionPtr指向的内存与函数进行比较。

所以assert_memory_equal( FunctionPtr, funcA(), sizeof( funcA() ) );我不会使用assert(FunctionPtr == funcA);

您在评论中写道您assert_int_equal现在正在使用。请注意,这两个值都不是int,因此如果宏在错误情况下使用printfwith (或类似的),您将调用未定义的行为。%d

于 2017-08-29T08:44:04.640 回答