2016-01-22 265 views
0

我是新來的Junit測試,想測試一個類中的私有方法。但它導致可見性問題。我可以測試一個私有方法或使用Junit.Or保護的方法,我可以測試一個Junit構造函數中的邏輯?Junit測試私有方法

+3

可能重複[如何測試具有私有方法,字段或內部類的類?](http://stackoverflow.com/questions/34571/how-to-test-a-class-that-has- private-methods-fields-or-inner-classes) –

回答

-1

簡單地做這樣的:

private someMethod() {} 

public someMethodVisibleToAll() { 
    someMethod(); 
} 

這不是隱藏在私有方法複雜的邏輯,沒有任何接入測試是一個好主意,試圖使方法冪(無副作用)。

如果遺留代碼使用Powermock,但首先嚐試重構上面的代碼,如果它不可能比Powermock作爲最後的緊急中斷。

只是通知:如果您使用的慣例,JUnit測試具有相同的包名稱,如

代碼的src/main/java的

package my.package.first 
JUnit中的文件夾

的src/main受保護的方法是testbable /測試

package my.package.first 

比你的所有受保護的方法可用來測試

更新:

應該始終有通過公開方式或間接地測試私有方法的方式保護其使用或包括使用的私有方法能方便的測試情況。如果這不是真的,並且您不依賴於遺留代碼或第三方代碼,那麼這是一個警告,指出類設計有什麼問題。

+1

此解決方案正在污染公共API。直接使用'someMethod'來打包私有或受保護的可見性會更保守。 – CoronA

+0

它如何污染公共API?如果該方法沒有副作用?但是,當方法有副作用時,使用受保護的方法會更安全,但是後來出現問題,它是否被設計爲安全的方式?但那是我想的其他故事。 – bodo

+0

@CoronA我認爲公共API應該在大多數時間界面中明確選擇暴露給世界的方法,只有在極少數情況下才應該改變方法。所以,如果你的類有公共方法,不是接口的一部分,這些方法沒有副作用,那麼我不認爲有理由使它們受保護或私有。 – bodo