2016-10-10 12 views
5

clone()メソッドをインターフェイスで黙ってMockito 2.1.0で動作していないように見えます。以下のコードは、Mockito 1.10.19で正常に動作しますが、IllegalAccessError Mockito 2.1.0 とスロー:私はmockitoのバグリストを確認模擬インターフェイスのクローンメソッド

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

:テストの上実行しているの

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

の検索結果をグーグルで少し見つけましたが、何も見つかりませんでした。 mockitoチームにバグレポートを提出する前にまずSOコミュニティを確認したい

環境:JDK 1.8.0_102JUnitの4.11Mockito 2.1.0のGradle 3.0のWindows 10

EDIT:はmockitoチームhereでバグを提出

答えて

3

これはMockitoのバグです。 Object::cloneので

protectedであり、Javaはインタフェースの継承上サブクラス継承を好むので、自動的に生成されたサブクラスはprotected方法ではなく、public方法としてcloneを上書き。もちろん、Mockitoはすべてのオーバーライドされたメソッドをpublicとしてレンダリングする必要がありますが、現在Mockitoはこれをしていません。しかしこれは修正するのは簡単ではありません。これが将来のリリースで解決されることを期待してください。

+1

うわー、githumのこのバグを報告してから約35分後の修正。非常に感動。 – jenglert