首页 > 解决方案 > 在同一单元中测试文件期间,如何存根、包装或重新分配 C 函数?

问题描述

编译器:GCC 7.4(C 编译器)

单元测试框架:Cantata 6.2

我有一个正在测试的单元,其中函数采用这种一般形式:

void functionName(type *x, type y, type *result)
{
   assert(NULL != result);
   *result = OK;

   if (NULL == x)
      *result = NOT_OK;

   if (OK == *result)
      otherFunction(y, result);

   if (OK == *result)
      anotherFunction(y, result);

   if (OK == *result)
      yetAnotherFunction(y, result);
}

单元中所有函数的所有输入,以及许多单元级变量,理所当然地以各种方式进行测试。我现在有一个测试覆盖率问题,因为我无法在同一单元中存根由被测函数调用的函数,因此我无法强制result调用被调用函数。这意味着其中一些(OK == *result)谓词永远不会是假的。

你如何解决这个问题?

我尝试在测试脚本中重新分配内部函数:

anotherFunction = stubFunction;

这并不完全出乎意料,给了我这个编译错误:

error: lvalue required as left operand of assignment

标签: cunit-testingembedded

解决方案


推荐阅读