2013-04-05 59 views
5

我開始寫JUnit測試用例的遺留代碼庫。公共方法之一有多個if語句,並基於它調用不同私有方法的條件。
我應該只寫一種測試方法並測試所有條件嗎?每種情況的一種方法?JUnit的最佳實踐:公共方法調用多個私有方法

如果我爲每個if條件編寫單獨的方法,是不是會失去一致性?

什麼是測試私有方法的辦法?私有方法邏輯可能比公共方法更復雜。

回答

4

根據您想要測試的場景數量的方法數量,它與被測試的東西的方法無關。

如果每個場景都有自己的代碼設置,那麼您將爲每個場景獲得一種測試方法。如果您可以參數化測試,那麼您可以使用一種測試方法並針對每種情況傳入不同的數據。

重要的是,對於每個輸入組合,您希望測試獨立於其他測試成功或失敗。如果你把所有的測試都歸結爲一種方法,那麼就不會發生,第一次測試失敗會阻止剩下的測試運行。

0

從我的角度來看,單元測試中的較小單元通常會導致更好的測試。 對於你來說,這意味着要將私有方法改爲封裝私有方法,併爲每個方法編寫測試。

+0

不能做到這一點。這是一個遺留代碼,一些邏輯不能公開。 – 2013-04-05 19:19:40

+0

我不會將它改爲公開的,但要封裝私有並確保測試在同一個包中(通過分離生產和測試源) – user2088476 2013-04-05 19:24:18

1

我同意彌敦道。測試應該通過場景而不是方法。有時遺留代碼是以您需要直接測試私有方法的方式編寫的。是的,代碼應該重構。但是,如果你不能重構或希望在的地方首先在測試......

選項1 - 使方法包私有訪問

這是一個非常安全的重構。

選項2 - 使用反射來調用靜態方法直接

如果你真的不能碰的代碼,這是你能做的最好的。我會質疑不接觸代碼的要求。如果我們不能改進代碼,我們應該把它放在角落腐爛嗎?

+1

可能是在Groovy中編寫測試(不尊重隱私)可能是另一種選擇。 – 2013-04-08 13:14:51

+0

@NathanHughes出色的建議! – 2013-04-09 00:02:58

相關問題