模拟接口克隆方法

jen*_*ert 5 java mockito

嘲弄一个clone()接口上的方法似乎不再有工作的Mockito 2.1.0.下面的代码适用于Mockito 1.10.19,IllegalAccessErrorMockito 2.1.0中抛出一个:

public interface CloneableInterface extends Cloneable {
   CloneableInterface clone();
}

public class CloneableInterfaceTest {

   @Test
   public void test() {      
     CloneableInterface i = Mockito.mock(CloneableInterface.class);
     Mockito.when(i.clone()).thenReturn(i); // Throws IllegalAccessError
   }
}
Run Code Online (Sandbox Code Playgroud)

运行测试结果:

java.lang.IllegalAccessError: CloneableInterface$MockitoMock$833899610.clone()LCloneableInterface;
Run Code Online (Sandbox Code Playgroud)

我检查了mockito bug列表并搜索了一下但没有发现任何内容.在与mockito团队提交错误报告之前,想先检查SO社区.

环境:JDK 1.8.0_102,JUnit 4.11,Mockito 2.1.0,Gradle 3.0,Windows 10

编辑:在这里提到了mockito团队的一个错误

Raf*_*ter 3

这是 Mockito 中的一个错误。

由于JavaObject::cloneprotected喜欢子类继承而不是接口继承,因此自动生成的子类会重写cloneprotected方法,而不是public方法。当然,Mockito 应该渲染所有重写的方法,public但目前 Mockito 没有这样做。然而,解决这个问题很简单。预计这个问题将在未来的版本中得到解决。