java反射访问私有字段抛出NoSuchFieldException,即使字段存在
我有一个私人领域的课程java反射访问私有字段抛出NoSuchFieldException,即使字段存在,java,reflection,Java,Reflection,我有一个私人领域的课程 public class HibernateSessionFactoryManager{ private SessionFactory sessionFactory; } 现在我想使用私有字段对一些方法进行单元测试。因此,我试图使用java反射访问私有字段 try { Field field = HibernateSessionFactoryManager.class.getDeclaredField("sessionFactory");
public class HibernateSessionFactoryManager{
private SessionFactory sessionFactory;
}
现在我想使用私有字段对一些方法进行单元测试。因此,我试图使用java反射访问私有字段
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类似问题的人来说:当使用
类设置私有字段时。getDeclaredField()
必须使用new
直接实例化要设置私有字段的对象,而不是调用Mockito的mock()
是否“manager”可能是派生类的对象?很抱歉,我使用了manager=spy(新的HibernateSessionFactoryManager());Mockito是我用来模拟的一个框架。编译代码时代码是否被混淆了?模拟框架可能正在创建代理对象而不是真实对象。检查Mockito文档。是的,Mockito注入了问题,一旦我删除了spy并创建了实际对象,问题就解决了。