2016-10-10 11 views
5

Kpiny z metody clone() na interfejsie nie działają już z Mockito 2.1.0. Poniższy kod działa poprawnie z Mockito 1.10.19 ale zgłasza IllegalAccessError z Mockito 2.1.0:Metoda klonowania interfejsu klonu

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

Wynikiem działania powyższego badania:

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

Sprawdziłem listę bug Mockito i googled trochę, ale nic nie znalazłem. Chciał najpierw sprawdzić społeczność SO przed zgłoszeniem zgłoszenia błędu zespołowi mockito.

Środowisko: JDK 1.8.0_102, JUnit 4.11, Mockito 2.1.0, Gradle 3,0, systemu Windows 10

EDIT: Zapisano błąd z zespołem Mockito here

Odpowiedz

3

To jest błąd w Mockito.

Od Object::clone jest protected a ponieważ Java sprzyja podklasy dziedziczenia nad interfejsem dziedziczenia, automatycznie generowany podklasa nadpisuje clone jako metoda protected, zamiast metody public. Oczywiście Mockito powinien renderować wszystkie nadpisane metody jako public, ale obecnie Mockito tego nie robi. Jest to jednak łatwe do naprawienia. Oczekuj, że problem zostanie rozwiązany w przyszłej wersji.

+1

Wow, poprawka w ~ 35 min po zgłoszeniu tego błędu na githum. Pod wielkim wrażeniem. – jenglert

Powiązane problemy