2011-03-29 121 views
0

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

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

回答

3

Dynamic Proxy Classes可能是一种方法。我从来没有使用它,但它是一个可行的机制,以捕获每个方法调用,并决定是否调用旧的方法或做别的和/或额外的。

我提供的链接甚至有一个DebugProxy的例子,这可能对您有所帮助。

+0

我用这个例子:http://blog.frankel.ch/tag/proxy – jonderry 2011-03-29 01:58:15

1

出于测试目的,我想 替代的实现 一些接口的对象的几个 方法的实现。

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

public class ForTest extends X { 

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

} 

public class X implements Z{ 

//all the overrides 

} 

interface Z { 

//lots of methods 

} 
+1

虽然我需要实例中的数据。有大量的领域。 – jonderry 2011-03-29 00:10:35

+0

因此,无论您目前使用填充的数据构造原始实例,都要构建ForTest实例。 – 2011-03-29 00:13:29

+1

重点是我试图避免显式实现所有的方法,并明确复制所有的字段。 – jonderry 2011-03-29 00:14:53

4

使用一些模拟框架像Mockito创建一个模拟:

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

的Mockito能够嘲笑两个接口和具体类。

+0

这种测试完全是嘲笑框架。 – 2011-03-29 00:21:08

相关问题