0

我想修改一个类的私有字段,比如说A类,它是另一个类的内部类,比如说B类。我尝试了java反射包并且可以获得该私有字段,但是当我将它分配给它抱怨的模拟对象时它无法将该字段设置为正确的类

这是我的代码:

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..

我看不出我的步骤有什么问题,有人可以帮忙吗?谢谢。

4

1 回答 1

0

请参考 Java API 文档字段。我认为代码应该是:

field.set(null, Mocito.mock(LookupService.class));
于 2017-01-10T04:35:44.213 回答