2017-03-27 169 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轉換失敗,你想程序崩潰或繼續等待,直到你鍵入正確?

另一種選擇是拋出一個異常,你可以從其他代碼塊捕獲並處理它。

相關問題