java – 模拟接口克隆方法

在界面上模拟clone()方法似乎不再适用于Mockito 2.1.0.下面的代码适用于Mockito 1.10.19但使用Mockito 2.1.0抛出IllegalAccessError:

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
   }
}

运行测试结果:

java.lang.IllegalAccessError: CloneableInterface$MockitoMock$833899610.clone()LCloneableInterface;

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

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

编辑:提交了模拟团队here错误

最佳答案
这是Mockito的一个错误.

由于Object :: clone受到保护,并且由于Java优先于接口继承的子类继承,因此自动生成的子类会将clone重写为受保护的方法,而不是公共方法.当然,Mockito应该将所有被覆盖的方法都公之于众,但目前Mockito并没有这样做.然而,这无法解决.期望在将来的版本中解决此问题.

相关文章

ArrayList简介:ArrayList 的底层是数组队列,相当于动态数组。与 Java 中的数组相比,它的容量能动态增...
一、进程与线程 进程:是代码在数据集合上的一次运行活动,是系统进行资源分配和调度的基本单位。 线程...
本文为博客园作者所写: 一寸HUI,个人博客地址:https://www.cnblogs.com/zsql/ 简单的一个类...
#############java面向对象详解#############1、面向对象基本概念2、类与对象3、类和对象的定义格式4、...
一、什么是异常? 异常就是有异于常态,和正常情况不一样,有错误出错。在java中,阻止当前方法或作用域...
Collection接口 Collection接口 Collection接口 Collection是最基本的集合接口,一个Collection代表一组...