出于测试目的,我想替换实现某个接口的对象的几个方法的实现。这样做的一种方法是创建一个新对象,将实例作为参数传递给构造函数,然后手动重新创建所有方法,以便为除了一些方法以外的所有方法使用实例的方法,这些方法将被覆盖以用于测试目的。不幸的是,界面有很多方法,这使得这个选项很乏味。从实例创建一个子类以覆盖几个方法?
是否有某种方法可以创建一个“对象实例的子类”的对象,因为它只是调用实例方法的所有调用,除非被重写?
出于测试目的,我想替换实现某个接口的对象的几个方法的实现。这样做的一种方法是创建一个新对象,将实例作为参数传递给构造函数,然后手动重新创建所有方法,以便为除了一些方法以外的所有方法使用实例的方法,这些方法将被覆盖以用于测试目的。不幸的是,界面有很多方法,这使得这个选项很乏味。从实例创建一个子类以覆盖几个方法?
是否有某种方法可以创建一个“对象实例的子类”的对象,因为它只是调用实例方法的所有调用,除非被重写?
Dynamic Proxy Classes可能是一种方法。我从来没有使用它,但它是一个可行的机制,以捕获每个方法调用,并决定是否调用旧的方法或做别的和/或额外的。
我提供的链接甚至有一个DebugProxy
的例子,这可能对您有所帮助。
出于测试目的,我想 替代的实现 一些接口的对象的几个 方法的实现。
只需创建一个扩展当前具体类的类,并仅覆盖要测试的接口中的那些方法。
public class ForTest extends X {
@Override
public void m1() {
.
.
.
}
}
public class X implements Z{
//all the overrides
}
interface Z {
//lots of methods
}
使用一些模拟框架像Mockito创建一个模拟:
MyComplexInterface mock = Mockito.mock(MyComplexInterface.class);
Mockito.when(mock.someMethod()).thenReturn("some value");
的Mockito能够嘲笑两个接口和具体类。
这种测试完全是嘲笑框架。 – 2011-03-29 00:21:08
我用这个例子:http://blog.frankel.ch/tag/proxy – jonderry 2011-03-29 01:58:15