在 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)。
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)。