[英]Write jUnit test case for if else block
我有一個簡單的if / else塊的方法。 在if和else塊中都調用一個私有方法。
下面是我要編寫單元測試用例的方法。
public void enableBLEScan() {
if (<some boolean expression which can be mocked>) {
initializeScan();
} else {
stopScan();
}
}
我可以很容易地改變布爾表達式的行為。
但是我想檢查else塊是否正確發生的方法調用。 我該怎么辦?
關鍵是:編寫單元測試時,測試是否調用內部私有方法是一種反模式!
您不測試內部實施細節。 對您的測試來說,某種“面向外部的”方法如何執行功能無關緊要。 換句話說,您有以下選擇:
換句話說:您的每個“公共”方法都應具有明確的定義含義。 因此,如果您調用它們,它們將具有定義的效果; 並且應該觀察/確認這種影響。
很可能您當前的設計確實支持這些想法。 然后,認真考慮:考慮退后一步並更改設計。 因為:您創建了無法合理測試的內容。 然后,您的設計還有其他問題的機會。
檢查私有方法是否被調用並不意味着您應該嘗試在單元測試中進行測試。
這不是驗收測試。 通常,您要測試類的行為和/或行為的結果。
就您而言,我看到了兩種可能的解決方法:
對於這種方式,我想您必須知道。
例如,您可以在根據initializeScan()
和stopScan()
邏輯設置的類中添加枚舉字段ScanState
。
ScanState
示例:
public enum ScanState{
(INITIALIZED, STOPPED)
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.