我跟着一个程序教程,在其中,老师有一堆函数返回一个布尔值来表示成功。他们是这样写的:
bool SomeFunc()
{
//code....
return true;
}
这意味着你可以编写单元测试,这些测试对于这些函数都是正确的,并且是表明整个函数正常运行的一种方法。对我来说,这样做的方法是,如果在该函数中的一堆不同点上,如果发生错误,则会对返回false的事物进行一系列不同的检查:
bool SomeFunc()
{
if(!someThing)
return false;
return true;
}
但是如果相反,你只是在执行检查的函数中有一堆断言:
bool SomeFunc()
{
assert(someThing, "Error: thing not working");
return true;
}
那么如果断言会捕获任何错误,那还有理由继续单元测试这个函数吗?我能想到的唯一原因是你是否希望你的单元测试在这些函数的发布模式下工作,然后你会添加断言和if语句(因为断言通常在发布模式下关闭)。
答案 0 :(得分:0)
有些时候,我们想要执行一个可能失败的行动,在这种情况下你会做类似的事情:
if( function() )
{
//doSomething
}
else
{
//Handle error
}
如果你的函数()失败,你从程序执行中调用assert()就会停止,所以你什么都不管。
如果您构建一个从控制台读取的用户程序,那么您需要键入一个char,这样从char到int的转换失败,您是否希望程序崩溃或继续等待直到您输入正确的内容?另一个选择是引发一个异常,您可以从其他代码块中捕获并处理它。