【问题标题】:Input of a fucntion with "boolean" return type and "no parameters" in C在 C 中输入具有“布尔”返回类型和“无参数”的函数
【发布时间】:2016-11-03 16:36:56
【问题描述】:
boolean function(void)
{
   return TRUE;
}

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

详情:

我正在研究在 Tessy 中完成的复杂设备驱动程序的单元测试用例。默认情况下,tessy 将 unsigned char function 的传递值设置为“不相关”。使用该接口,返回值始终为TRUE

现在之前的一位测试人员通过将unsigned char function 的接口设置为“输入”并将其设置为FALSE 来测试此单元,这会导致返回值为FALSE 而不是TRUE

根据我的理解,这个测试用例似乎无效,因为这个函数不能接受任何输入并且总是返回 true。

【问题讨论】:

  • 不,它不能。在任何情况下它都不会返回 false。
  • 如果您可以访问代码,您可以在此函数之前将TRUE 定义为0 或等效项,然后在其后立即定义它
  • @PaulOgilvie #ifdef TRUE \ #undef TRUE \ #define TRUE 0 \ #endif 怎么样? :)
  • 由于函数不能返回 false,假设它返回 false 的测试用例确实是无效的,因为永远无法达到该状态;但是,在内部测试该单元的健壮性并防止将来出现错误可能是个好主意。
  • Algirdas,关键是该函数定义总是返回布尔值true

标签: c++ c unit-testing embedded driver


【解决方案1】:

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

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

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

【讨论】:

    【解决方案2】:

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

     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
    

    在给定“假”布尔值的情况下,您可以获得假的替代方法:

     #define TRUE 0
    

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


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

    【讨论】:

      猜你喜欢
      • 2015-01-18
      • 1970-01-01
      • 2016-09-18
      • 1970-01-01
      • 2016-09-13
      • 1970-01-01
      • 2018-08-21
      • 2020-01-24
      • 1970-01-01
      相关资源
      最近更新 更多