C++ 输入带有“的功能”;布尔值;返回类型和";“无参数”;在C中
在单元测试期间,此函数能否返回false 详情: 我正在查看在Tessy中完成的复杂设备驱动程序的单元测试用例。默认情况下,tessy将C++ 输入带有“的功能”;布尔值;返回类型和";“无参数”;在C中,c++,c,unit-testing,embedded,driver,C++,C,Unit Testing,Embedded,Driver,在单元测试期间,此函数能否返回false 详情: 我正在查看在Tessy中完成的复杂设备驱动程序的单元测试用例。默认情况下,tessy将无符号字符函数的传递值设置为“无关”。使用此接口,返回值始终为TRUE 现在,先前的一位测试人员通过将unsigned char function的接口设置为“input”并将其设置为FALSE,从而将返回值设置为FALSE,而不是TRUE 根据我的理解,这个测试用例似乎是无效的,因为这个函数不能接受任何输入,并且总是返回true。因为函数不能返回false,所
无符号字符函数的传递值设置为“无关”。使用此接口,返回值始终为TRUE
现在,先前的一位测试人员通过将unsigned char function
的接口设置为“input”并将其设置为FALSE
,从而将返回值设置为FALSE
,而不是TRUE
根据我的理解,这个测试用例似乎是无效的,因为这个函数不能接受任何输入,并且总是返回true。因为函数不能返回false,所以假设它返回false的测试用例确实是无效的,因为永远无法达到该状态;但是,在内部测试单元的健壮性并防止将来出现错误可能是一个好主意
但是,如果在任何未来版本中,函数仍然不会返回false(即其定义永远不会更改),那么使用努力(资源)来测试单元,以防发生不可能发生的事情,这是浪费资源(和金钱)
如果在不可预见的将来,函数定义确实发生了更改,那么更改管理的过程就是识别任何受影响的部件并重新测试这些部件,现在包括一个false
返回值。因为函数不能返回false,假设返回false的测试用例实际上是无效的,因为该状态永远无法达到;但是,在内部测试单元的健壮性并防止将来出现错误可能是一个好主意
但是,如果在任何未来版本中,函数仍然不会返回false(即其定义永远不会更改),那么使用努力(资源)来测试单元,以防发生不可能发生的事情,这是浪费资源(和金钱)
如果在不可预见的将来,函数定义会发生更改,那么更改管理的过程就是识别任何受影响的部分并重新测试这些部分,现在包括一个false
返回值。如果这是类上的一个方法,并且它出现在基类中,它可能会在派生类中被覆盖,如下所示:
boolean function(void)
{
return TRUE;
}
在给定“假”布尔值的情况下,获取假值的替代方法:
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
[这就是为什么你应该使用实类型]
编辑:我注意到你的问题被标记为[C]和[C++]。这个答案只适用于C++(它有类)。 如果这是类的一个方法,它出现在基类中,它可能在派生类中重写,例如:
boolean function(void)
{
return TRUE;
}
在给定“假”布尔值的情况下,获取假值的替代方法:
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
[这就是为什么你应该使用实类型]
编辑:我注意到你的问题被标记为[C]和[C++]。这个答案只适用于C++(它有类)。在任何情况下都不会返回false。如果您有权访问该代码,则可以在此函数之前将TRUE
定义为0
或等效项,然后在函数之后立即将其定义回来it@PaulOgilvie那么#ifdef TRUE\#undef TRUE\#define TRUE 0\#endif
?:)呢当函数不能返回false时,假设返回false的测试用例实际上是无效的,因为该状态永远无法达到;但是,在内部测试单元的健壮性并防止将来出现错误可能是一个好主意。Algardas,重点是该函数定义为始终返回布尔值true
。不,它不能。在任何情况下都不会返回false。如果您有权访问该代码,则可以在此函数之前将TRUE
定义为0
或等效项,然后在函数之后立即将其定义回来it@PaulOgilvie那么#ifdef TRUE\#undef TRUE\#define TRUE 0\#endif
?:)呢当函数不能返回false时,假设返回false的测试用例实际上是无效的,因为该状态永远无法达到;但是,在内部测试单元的健壮性并防止将来出现错误可能是一个好主意。Algardas的要点是,函数定义为始终返回布尔值true
。