2012-03-23 85 views
3

是爲公共方法或私有方法編寫的大部分JUnit測試嗎?如果我沒有那麼多時間,我需要關注哪些方面?我需要關注在JUnit測試中測試「公共」方法還是「私有」方法?

+2

1.你總是需要時間進行測試。如果你不這樣做,那麼你做錯了。 2.從公共方法開始測試所有內容。 – zengr 2012-03-23 05:36:04

+2

這是一個測試方法問題,因此它可能屬於http://programmers.stackexchange.com/。 – tjdett 2012-03-23 05:38:32

+0

如果您需要測試私有方法以獲得完整的覆蓋範圍,那麼您需要重構。 – Synesso 2012-03-23 05:42:05

回答

4

您應該測試構成API一部分的所有內容。除非您使用反射,否則這意味着公共/受保護和包級別的方法。

顯然,這是意見。但它是基於經驗的。讓我進一步聽取我的意見。

理想情況下,您應該練習測試驅動開發。在這種做法你:

  1. 先編寫測試,包括在他們的測試對象,你願望擁有的公共方法。這有助於您設計一個有用的API。
  2. 然後你寫足夠的代碼來通過測試。這將給你100%的覆蓋率和沒有無關的代碼。
  3. 然後你重構。

在進入重構階段之前,您可能甚至沒有任何私有方法。

0

取決於您的測試目標。 理想情況下,您想要以100%覆蓋範圍測試所有人:)

+0

對不起,但100%的LOC覆蓋率並不是真正經濟有效的測試方法;並不能保證課堂能夠達到應有的水平。但是,它可能導致虛假的安全感。 – 2012-03-23 06:38:25

+0

在具有用戶界面的真實世界應用程序中,它也幾乎是不可能的 - 因此也是笑臉。設定你的目標高我說。 – dbrin 2012-03-23 17:52:16

1

您測試類的行爲。從公開的方法開始。如果您覆蓋了對象的所有狀態,那麼您很可能會覆蓋私有方法。目標爲100%國家覆蓋(只是一個標記,在實際情況下不是真的可以實現)

+0

我會獎勵這個答案。我希望更多的人這樣想。測試應該是檢查你的班級是否滿足其要求;而不是你有什麼方法。如果你建立你的方法,然後看看測試它們,你就冒着爲你已經知道的功能編寫測試的風險;而不是爲你需要的功能編寫測試。 – 2012-03-23 06:18:09

+0

我已經授予了100個聲譽點的承諾獎勵。這個強大的答案強調我們應該測試行爲,而不是方法。它建議100%的國家覆蓋面(這是非常好的);而不是100%的LOC覆蓋率(這既不經濟也毫無意義)。我希望在我漫長的職業生涯中遇到的更多開發人員擁有Jayan對單元測試的態度。 – 2012-03-26 07:36:53

+0

@David Wallace:謝謝 - 增加了對'國家覆蓋面'的壓力 - 希望它不會與聲明範圍混淆:) – Jayan 2012-03-26 07:38:34

0

我懷疑你會看到很多私人方法在周圍浮動,也就是說,他們會出現在方法,其中涉及的變量不應在外部/非特定情況之外進行修改。這就是說,公共和私人之間的主要區別在於可訪問性:私人只能在班級中訪問,而公共可以在班級之外訪問。