2017-03-27 206 views
0

我跟着一个程序教程,并在其中,老师有一堆函数返回一个布尔值来表示成功。它们写起来就像这样:什么时候单元测试合适?

bool SomeFunc() 
{ 
    //code.... 
    return true; 
} 

这意味着您可以编写单元测试,期待这些功能真实,是表明全功能运行正常的一种方式。对我来说,这样的工作方式是,如果在该函数内很多不同点,你如果发生错误,有一堆为返回假的东西不同的检查:

bool SomeFunc() 
{ 
    if(!someThing) 
     return false; 

    return true; 
} 

但是,如果不是你只是有一堆的函数中断言做你的检查:

bool SomeFunc() 
{ 
    assert(someThing, "Error: thing not working"); 

    return true; 
} 

然后会有一个理由还是单元测试,如果断言将正好赶上任何错误,这个功能呢?我能想到的唯一原因是,如果你想让你的单元测试在这些函数的发布模式下工作,那么你将添加断言和if语句(因为断言通常在发布模式下被关闭)。

+1

不要只是测试真正的案件返回true。还要确保假案件返回false。做得好就像成功一样重要。 – user4581301

+0

也是一件重要的事情。除了在上面的第一个例子中测试你的函数返回'true',单元测试可以测试函数是否被执行。一个典型的例子是返回void的函数,但是因此在一行中执行一些其他函数。 – dmi

+0

鉴于'assert'通常在生产版本中是没有操作的,可能您想要引发异常。 – juanchopanza

回答

0

有些时候,我们要执行可能失败或不动作,在此情况下,YOUT会做这样的事情:

if(function()) 
{ 
    //doSomething 
} 
else 
{ 
    //Handle error 
} 

如果你的函数()失败,并从内部调用assert()程序的执行被停止,所以你不能管理任何东西。

Imagene如果您构建从控制台读取一个int买你输入一个字符一个用户程序,以便从焦炭到int转换失败,你想程序崩溃或继续等待,直到你键入正确?

另一种选择是抛出一个异常,你可以从其他代码块捕获并处理它。

相关问题