2016-10-10 2 views
5

Mocking eine clone() Methode auf einer Schnittstelle scheint nicht mehr mit Mockito 2.1.0 zu arbeiten. Der Code unten funktioniert mit Mockito 1.10.19 aber wirft ein IllegalAccessError mit Mockito 2.1.0:Mocking Schnittstelle Klon Methode

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

Ergebnis oben Test ausgeführt wird:

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

ich die Mockito Fehlerliste überprüft und googelte ein bisschen, fand aber nichts. Ich wollte zuerst die SO-Community überprüfen, bevor ich einen Fehlerbericht mit dem Mockito-Team einreichte.

Umwelt: JDK 1.8.0_102, JUnit 4.11, Mockito 2.1.0, Gradle 3.0, Windows-10

EDIT: einen Fehler mit dem Mockito Team Filed here

Antwort

3

Dies ist ein Fehler in Mockito.

Seit Object::clone ist protected und da Java Unterklasse Vererbung über die Schnittstelle Vererbung begünstigt, die automatisch generierte Unterklasse überschreibt clone als protected Methode, sondern als ein public Verfahren. Natürlich sollte Mockito alle überschriebenen Methoden als public rendern, aber Mockito macht das momentan nicht. Dies ist jedoch trivial zu beheben. Erwarten Sie, dass dies in einer zukünftigen Version gelöst wird.

+1

Wow, ein Fix in ~ 35 min nach dem Melden dieses Bugs auf Githum. Sehr beeindruckt. – jenglert