Java 用jmockit替换继承的final方法
我正试图找到一种方法,用我自己的使用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
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可能有一个很好的理由。我完全同意。问题是,在这种情况下,它不是我的代码;这是谷歌的。