我想修改一个类的私有字段,比如A类,这是另一个类的内部类,比如说B类。我试过java反射包,可以得到那个私有字段,但是当我把它分配给mock时对象抱怨它无法将该字段设置为正确的类
这是我的代码:
public class Aggregator {
public static class AMapper extends Mapper<LongWritable, Text, LongWritable, Text> {
private LookupService lookupService = null; <-- field to mock
...
}
}
我的测试代码:
aggregator = new Aggregator();
for (Class<?> c: aggregator.getClass().getClasses()) {
if (c.getName().equals("Aggregator$AMapper")) {
Field field = c.getDecalredField("lookupService");
field.setAccessible(true);
field.set(c, Mocito.mock(LookupService.class)); <-- failed here
break;
}
}
我得到的错误信息是:
java.lang.IllegalArgumentException: Can not set com.maxmind.geoip.LookupService field Aggregator$EventTypeMapper.lookupService to java.lang.Class..
我看不出我的步骤有什么问题,任何人都可以提供帮助?感谢。
答案 0 :(得分:0)
请参阅Java API doc Field 。我认为代码应该是:
field.set(null, Mocito.mock(LookupService.class));