2016-12-01 70 views
1

我想知道是否應該單元測試沒有控制流的功能。這個函數需要一些輸入,調用5/6個其他函數的序列,然後返回一些輸出。我是否需要單元測試功能而沒有控制流?

測試它們似乎浪費時間,因爲我沒有看到我將要測試的是什麼。其他調用的函數已經對它們進行了單元測試。 我的主要缺點是我不知道輸出應該是先驗的,我需要在測試腳本中調用相同的函數來查看結果是否一致;然後我在測試什麼?測試函數和實際函數具有相同順序的相同行嗎?

感謝任何見解

注:同最後一個問題,如果你認爲它的主要依據意見重新擬訂爲「根據藝術主張單元測試的原則,我應該單元測試功能沒有控制流? 「

+0

測試不測試控制流。測試測試某個函數是否爲某些輸入返回正確的輸出,就是這樣。如果您正在進行測試,那麼函數不需要進行測試的唯一方法就是假設它的所有子函數都得到了適當的覆蓋,那麼,如果您對自己作出堅定不移的承諾,那麼函數將永遠不會被編輯,無論如何。你準備好了嗎? – Amadan

+0

@Amadan誠然,你是對的。謝謝,我會執行它們:D – Ant

回答

1

簡短回答:是的,當然,你呢!

長答案:一個方法如何做到最後的「實現」細節。從這個意義上說:如果一個方法使用一個開關,一些if/elses,一個循環,或者只是依次調用其他方法,則不應該在意。

取而代之,您應該瞭解您的方法提供的合同:需要的輸入;以及它的內容(取決於輸入可能)。

這就是你所關注的:創建一個你的方法可以運行的設置;然後檢查該方法是否支持該合同。

實施例:

public void foo(Bar bar) { 
    FooBar fooBar = bar.wobbel(); 
    fooBar.throttle(); 
    fooBar.rattle(this.someField); 
} 

代碼以上不含有任何控制流語句。但是,仍然存在各種可能出錯的地方(例如NullPointerExceptions)。你不認爲用單元測試來捕捉那些人會更好嗎?

+1

是的,這很有意義。謝謝! – Ant

+0

非常歡迎。 – GhostCat