2016-01-22 147 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