我正在做一个单元测试,我想比较一个不返回任何东西的
void
函数的结果。
我有以下例子:
void foo (string &istr){
// empty string (negative case)
if (istr.empty())
{
// std::cout << "empty string"
// << "\n";
return;
}
// only white space (negative case)
if (istr.begin(), istr.end(), isspace)
{
// std::cout << "only white space"
// << "\n";
return;
}
// some code doing something...
}
而我想测试一下,比如:
inline bool test4_getTokenFreqVec(){
std::string input1 = " ";
getTokenFreqVec(input1);
if(getTokenFreqVec(input1) == null){
return true;
}
return false;
}
我知道不可能将
void
函数与 C++ 中的 null
进行比较,所以我想问一下,是否有修复我的单元测试的解决方案?
注意:您不能将
void
函数更改为 int
或任何其他数据类型。
由于函数返回
void
,你不能将它与任何东西进行比较。既然你说返回类型不能更改为另一种类型,那么你只有几个选择:
如果函数修改其
istr
参数的值,则单位
测试可以检查传递给该参数的 string
对象是否已以理想的方式进行了修改。
由于函数写入了
std::cout
,您的单元测试可以暂时重定向 std::cout
以将其输出写入 std::stringbuf
而不是 STDOUT
,然后您的单元测试可以检查该缓冲区的内容是否包含所需的输出。
否则,在需要时让函数
throw
出现异常,并让单元测试捕获该异常。