Private 方法真的需要測試嗎?
這樣的討論通常都是兩邊都有道理, 兩派的意見分別為:
- Private 方法必然是很單純,所以應該是簡單到不能出錯,所以 不用測?
- Private 方法有時候會有一些複雜度,所以還是需要測試。
我個人的意見是我認為 Private method 的粒度一定是相對來說比較小的,可以確保小範圍的測試是正確的,何樂不為?
Private 方法只能在自身 Class 讀取,該如何測試?
回顧 Java 的 Access Level 看下表最為簡單清楚,
Modifier | Class | Package | Subclass | World |
---|---|---|---|---|
public | Y | Y | Y | Y |
protected | Y | Y | Y | N |
no modifier | Y | Y | N | N |
private | Y | N | N | N |
private void hello()
變成 void hello()
。這樣的好處是只要透過一樣的 Package path ,就可以讀取到 package level private 的方法。
但這樣的缺點的就是在語意和概念上,就是一個 private method
但我們在 code 的呈現上就會懷疑這個 default level 的 method 是不是少加了 private
?
VisibleForTesting Annotation 登場
在上面可能產生程式碼語意上的表達不清楚,於是就有了 @VisibleForTesting
來協助解決問題,而方法就會長得像:
1 | @VisiableForTesting |
盡管看起來有一點怪,但讀程式的人就可以了解,Access Level 被去掉的原因,可能是因為測試的關係,就不會擅自去加 private
導致測試無法正常運作。