单元测试时替代java访问的替代方法

All*_*nde 2 junit unit-testing private-members

我正在尝试用一些私有方法对一个类进行单元测试.每种私有方法都可以相当广泛.

我可以使方法包作用域(导致警告),或者我可以使用下面的代码来测试它:

Method method = instance.getClass().getDeclaredMethod("methodName");
method.setAccessible(true);
Object object = method.invoke(instance);
assertNotNull(object);
Run Code Online (Sandbox Code Playgroud)

这个类不是"上帝对象",它的大部分方法都涉及它的所有领域.

关于如何更好地处理这个问题的任何建议?

KLE*_*KLE 11

测试私有方法也可能是一种测试气味.

我的参考资料是优秀的书籍http://www.manning.com/rainsberger/

  1. 您应该测试行为而不是方法:粒度有点不同.

    示例1:要测试桩,您如何测试push并且pop不相互引用?但是测试全球行为是可能的.这提醒我们,即使是测试,对象也是正确的粒度,而不是方法.

    示例2:当您要测试多个对象之间的交互时,按方法测试方法显然不正确,您要测试全局行为.

  2. 如果一个方法不公开,它就不能被外界调用,并且它的行为不太严格.但更重要的是,如果您测试私有方法,您将无法在以后重构代码.因此,测试应仅针对公共代码进行.

  • 所有私有方法都未使用,应从代码库中删除或通过公共方法(或多个公共方法)调用,并且您对公共方法的输入应设计为测试公共调用的所有私有方法方法. (2认同)