我有一个带有私有(private)字段的类
public class HibernateSessionFactoryManager{
private SessionFactory sessionFactory;
}
现在我想使用私有(private)字段对某些方法进行单元测试。所以我尝试使用 java reflection 访问私有(private)字段。
try {
Field field = HibernateSessionFactoryManager.class.getDeclaredField("sessionFactory");
field.setAccessible(true);
//field.set
SessionFactory sessionFactory = (SessionFactory) field.get(manager);
} catch (NoSuchFieldException e) {
System.out.println("no such");
e.printStackTrace();
} catch (IllegalAccessException e) {
e.printStackTrace();
}
我正在获取
java.lang.NoSuchFieldException: sessionFactory at java.lang.Class.getField(Class.java:1584)
我无法弄清楚我犯了什么错误。任何帮助将不胜感激。
最佳答案
为了那些在Mockito中遇到类似问题的人的利益:当使用class.getDeclaredField()
设置私有(private)字段时,要设置私有(private)字段的对象必须直接实例化使用 new
,而不是调用 Mockito 的 mock()
。
关于java反射访问私有(private)字段抛出NoSuchFieldException即使该字段存在,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31917158/