我想在最终的utitlity类中测试私有方法。
1。课程本身:
班级签名是:
public final class SomeHelper {
/** Preventing class from being instantiated */
private SomeHelper() {
}
还有私有方法本身:
private static String formatValue(BigDecimal value)
测试已经完成了,但是之前,该方法是在没有私有构造函数的非实用非final类中。
测试已使用@RunWith(Parameterized.class)
。
现在我得到的只是一个例外:
org.mockito.exceptions.base.MockitoException:
Cannot mock/spy class com.some.package.util.SomeHelper
Mockito cannot mock/spy following:
- final classes
- anonymous classes
- primitive types
2。测试
此测试中最重要的一行是:
String result = Whitebox.invokeMethod(mValue, "formatValue", mGiven);
有没有办法让测试工作?
答案 0 :(得分:7)
您不需要测试私有方法。
但你应该测试那些使用它的人。如果调用私有方法的方法按预期工作,则可以假设私有方法正常工作。
<强>为什么吗
没有人会单独调用此方法,因此不需要进行单元测试。
答案 1 :(得分:1)
您不需要测试私有方法,因为它不会被直接调用。但如果它意识到一些如此复杂的逻辑,你想要这样做,你应该考虑提取类。
答案 2 :(得分:0)
我最终做的是基于@Sachin Handiekar在评论中提供的问题How do I test a class that has private methods, fields or inner classes?的回答。
这不是最美丽的方式,考虑到私人方法不应该被测试,但我想测试它,我只是好奇。
这就是我做到的。
Class someHelper = SomeHelper.class;
Method formatValue = someHelper.getDeclaredMethod("formatValue ", BigDecimal.class);
formatValue.setAccessible(true);
String result = (String) formatValue .invoke(new String(), mGiven);
它就像一个魅力。