2016-10-10 23 views
5

Chế độ nhạo một phương thức clone() trên giao diện dường như không còn hoạt động với Mockito 2.1.0. Mã dưới đây hoạt động tốt với Mockito 1.10.19 nhưng ném một IllegalAccessError với Mockito 2.1.0:Phương thức sao chép giao diện giả mạo

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

Kết quả chạy trên thử nghiệm:

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

Tôi đã kiểm tra danh sách lỗi Mockito và googled một chút nhưng không tìm thấy gì cả. Muốn kiểm tra cộng đồng SO trước khi gửi báo cáo lỗi với nhóm mockito.

Môi trường: JDK 1.8.0_102, JUnit 4.11, Mockito 2.1.0, Gradle 3,0, của Windows 10

EDIT: Filed một lỗi với đội Mockito here

Trả lời

3

Đây là lỗi trong Mockito.

Kể từ Object::cloneprotected và kể từ Java ủng hộ lớp con thừa kế qua giao diện thừa kế, phân lớp tự động tạo ra đè clone như một phương pháp protected, chứ không phải là một phương pháp public. Tất nhiên, Mockito sẽ hiển thị tất cả các phương thức ghi đè là public nhưng hiện tại Mockito không làm điều này. Tuy nhiên, điều này là không đáng kể. Mong đợi điều này sẽ được giải quyết trong một bản phát hành trong tương lai.

+1

Chà, sửa chữa sau ~ 35 phút sau khi báo cáo lỗi này trên githum. Rất ấn tượng. – jenglert

Các vấn đề liên quan