2016-10-10 31 views
5

Bir arabirimde clone() yönteminin alay edilmesi artık Mockito 2.1.0 ile çalışmaktadır. Aşağıdaki kod Mockito 1.10.19 ile çalışıyor ancak bir IllegalAccessError Mockito 2.1.0 ile atar: Ben Mockito hata listesine baktımArabirim klonlama yöntemi

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

: testin yukarıda çalışan

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

Sonucu ve biraz googled ama hiçbir şey bulunamadı. Mockito ekibi ile bir hata raporu dosyalamadan önce SO topluluğu kontrol etmek istedim.

Çevre: JDK 1.8.0_102, JUnit 4.11, mockito 2.1.0, Gradle 3.0, , Windows 10

DÜZENLEME: Mockito ekibi here hata bildiriminde Filed

cevap

3

Bu Mockito'da bir hatadır. Object::clone yana

protected ve Java arabirimi miras fazla alt miras yana yana, otomatik olarak oluşturulan alt yerine bir public yönteme göre, bir protected yöntem olarak clone geçersiz kılar. Tabii ki, Mockito, tüm geçersiz kılınmış yöntemleri public yapmalıdır, ancak şu anda Mockito bunu yapmamaktadır. Ancak bu düzeltilmesi önemsizdir. Gelecekteki bir sürümde çözülmesi için bunu bekleyin.

+1

Vay, bu hatayı githum üzerinde bildirdikten sonra ~ 35 dakika içinde bir düzeltme. Çok etkilendim. – jenglert