java - 如何测试具有私有(private)方法、字段或内部类的类?

标签 java unit-testing junit tdd

如何使用 JUnit 测试具有内部私有(private)方法、字段或嵌套类的类?

为了能够运行测试而更改方法的访问修饰符似乎很糟糕。

最佳答案

如果您有一些遗留的 Java 应用程序,并且不允许更改方法的可见性,那么测试私有(private)方法的最佳方法是使用 reflection .

在内部,我们使用助手来获取/设置 privateprivate static 变量以及调用 privateprivate static 方法。以下模式将使您可以执行与私有(private)方法和字段相关的几乎所有操作。当然,你不能通过反射改变private static final变量。

Method method = TargetClass.getDeclaredMethod(methodName, argClasses);
method.setAccessible(true);
return method.invoke(targetObject, argObjects);

对于字段:

Field field = TargetClass.getDeclaredField(fieldName);
field.setAccessible(true);
field.set(object, value);

Notes:

  1. TargetClass.getDeclaredMethod(methodName, argClasses) lets you look into private methods. The same thing applies for getDeclaredField.
  2. The setAccessible(true) is required to play around with privates.

关于java - 如何测试具有私有(private)方法、字段或内部类的类?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6543135/

相关文章:

java - hibernate show_sql 值

unit-testing - 参数化 jUnit 测试,无需更改运行程序

unit-testing - 您如何测试自己编写的代码?

java - 如何断言异常被捕获?

java - 在 jUnit 中测试有序的 CRUD

spring - 为什么mockMVC和mockito不能一起工作?

java - Spring:异步事件处理

java - 为什么从其他类调用 JPanel 会给出 NullPointerException 错误?

java - 删除 XML 输入文件 Java

python - 如何对 django 消息进行单元测试?