在 C 中输入 "boolean" return 类型和 "no parameters" 的函数

Input of a fucntion with "boolean" return type and "no parameters" in C

boolean function(void)
{
   return TRUE;
}

这个函数在单元测试期间可以 return false 吗?

详情:

我正在查看在 Tessy 中完成的复杂设备驱动程序的单元测试用例。默认情况下,tessy 将 unsigned char function 的传递值设置为 "irrelevant"。使用此接口,return 值始终为 TRUE

现在之前的一位测试人员通过将 unsigned char function 的接口设置为 "input" 并将其设置为 FALSE 来测试此单元,这导致 return 值变为 FALSE 而不是 TRUE

根据我的理解,此测试用例似乎无效,因为此函数无法接受任何输入,并且始终 return 为真。

由于函数不能 return false,假设它 returned false 的测试用例确实无效,因为永远无法达到该状态;但是,在内部测试单元的稳健性并防止将来出现错误可能是个好主意。

但是如果在任何未来的版本中,函数仍然永远不会 return false(即它的定义永远不会改变),那么使用努力(资源)来测试单元以应对永远不会发生的事情,是浪费资源(和金钱)。

如果在某些不可预见的未来,函数定义 确实 发生变化,那么变更管理过程将识别受影响的任何部分并重新测试这些部分,现在包括false return 值。

如果这是 class 上的方法并且它出现在基础 class 中,它可能会在派生 class 中被覆盖,如下所示:

 class A
 {
    bool function() // note use of a real C++ type, bool
    {
        return true; // note use of a real C++ bool constant
    }
 }

 class B
 {
    bool function() // C++ doesn't have an @overrides annotation
    {
        return false;
    }
 }

 void main()
 {
   A a;
   B b;
   A & c(b)
   assert(a.function());
   assert(! b.function());
   assert(c.function());  // because function is not virtual

在给定 'fake' 布尔值的情况下,您可以获得 false 的替代方法:

 #define TRUE 0

[这就是你应该使用真实类型的原因]


编辑:我注意到您的问题被标记为 [C] 和 [C++]。此答案仅适用于 C++(具有 classes)。