从实例创建一个子类来覆盖一些方法?

时间:2011-03-29 00:04:12

标签: java inheritance

出于测试目的,我想替换实现某个接口的对象的几个方法的实现。这样做的一种方法是创建一个新对象,将实例作为参数传递给构造函数,并手动重新创建所有方法,以便为除了几个方法之外的所有方法使用实例的方法,这些方法将被覆盖以用于测试目的。不幸的是,界面有很多方法,这使得这个选项变得乏味。

是否有某种方法可以创建一个“对象实例的子类”的对象,因为它只是为所有调用调用实例的方法,除非被覆盖?

3 个答案:

答案 0 :(得分:4)

使用像Mockito这样的模拟框架创建模拟:

MyComplexInterface mock = Mockito.mock(MyComplexInterface.class);
Mockito.when(mock.someMethod()).thenReturn("some value");

Mockito能够模拟接口和具体类。

答案 1 :(得分:3)

Dynamic Proxy Classes可能是一种方法。我以前从未使用它,但是它是一种可行的机制来捕获每个方法调用并决定是调用旧方法还是做其他事情和/或额外的。

我提供的链接甚至包含DebugProxy的示例,可能对您有所帮助。

答案 2 :(得分:1)

  

出于测试目的,我想   替换几个实现   实现的对象的方法   一些界面。

只需创建一个扩展当前具体类的类,并从您要测试的接口中仅覆盖那些方法。

public class ForTest extends X {

    @Override
    public void m1() { 
        .
        .
        .
    }

}

public class X implements Z{ 

//all the overrides

}

interface Z { 

//lots of methods

}