Java 用jmockit替换继承的final方法

Java 用jmockit替换继承的final方法,java,unit-testing,mocking,jmockit,Java,Unit Testing,Mocking,Jmockit,我正试图找到一种方法,用我自己的使用jMockIt的实现替换继承的final方法 假设我有以下几点: public class Base { ... public final int getX() {...} } public class Derived extends Base { } 例如,有没有一种方法可以重新定义getX()以始终返回10 我试着这样做: new Base() { @Mock public int getX() { return

我正试图找到一种方法,用我自己的使用jMockIt的实现替换继承的final方法

假设我有以下几点:

public class Base {
  ...
  public final int getX() {...}
}

public class Derived extends Base {
}
例如,有没有一种方法可以重新定义getX()以始终返回10

我试着这样做:

new Base() {
    @Mock
    public int getX() {
        return 10;
    }
};

Derived d= new Derived();

System.out.println(d.getX());
这会产生一个运行时异常,即jMockIt无法找到int getX()的匹配方法

我偶然发现了这样一条线索:

但我不太理解这里提供的解决方案


有人能帮忙吗?

找到了一个解决方案…看起来我只需要模拟基类,派生实例也得到了更新:

...
new MockUp<Base>() {
    @Mock int getX() { return 10;}

};
Derived d = new Derived();
System.out.println(plot.getWidth());  // prints 10
...
。。。
新模型(){
@Mock int getX(){return 10;}
};
派生d=新派生();
System.out.println(plot.getWidth());//印刷品10
...

太酷了。。。我只是想说,在使用这些模拟框架时应该小心。他们说当你只有一把锤子时,一切看起来都像钉子。有时必须找到这样的解决方案表明您的设计中缺少一个接口。引入一个本身可以模拟的新接口可能是您想要做的事情,而不是模拟最终的方法。毕竟,这种方法被标记为final可能有一个很好的理由。我完全同意。问题是,在这种情况下,它不是我的代码;这是谷歌的。