例如,我有以下代码:
SomeClass stub = Mockito.mock(SomeClass.class);
之后,存根是 SomeClass 的正常实现,但有自己的行为(默认是抛出一些异常,但没关系)
我怎样才能为我的图书馆做同样的事情?我希望能够用一些 wrap() 方法包装一些类,甚至更好的实例,以混合我的行为。
jmock 和 Mockito(使用 jmock 代码)在内部都使用 cglib 来创建它们的存根/代理。见ClassImposterizer
。
对于简单的情况,您可以使用 Java 的Proxy
机制来创建要存根或模拟的接口的动态代理(实际上只是调用处理程序)。
这是一种proxy
设计模式。代理实现了模拟接口/扩展了模拟类,因此可以将其强制转换为模拟类型。如果需要,它还可以将责任委托给“实际实施”。通常,这种代理存根是通过少量反射创建的。