這可能與this question的根本問題相同,但更容易重現。Mockito在試圖在包私有超類上實現的存根方法時調用實際方法
問題是在模擬公共類上擴展接口方法實現的包私有類時,如何對接口方法進行stubbing接口方法。 Mockito將調用包私有類中真正的接口方法實現。看下面的例子。它實現的接口方法之一
接口
public interface DontCallMe {
int dontCallMeSuper();
int dontCallMe();
}
套餐默認類。
abstract class PackagePrivate
implements DontCallMe {
@Override
public int dontCallMeSuper() {
throw new IllegalArgumentException("don't call me super");
}
}
實現其他的包私有類的公共子類。
public class Public
extends PackagePrivate {
public Public() {
super();
}
@Override
public int dontCallMe() {
throw new IllegalArgumentException("don't call me");
}
}
測試類運行測試
java.lang.IllegalArgumentException: don't call me super
at PackagePrivate.dontCallMeSuper(PackagePrivate.java:6)
at Public.dontCallMeSuper(Public.java:1)
at ExampleJunit.testStaticConstructorInnerClass(ExampleJunit.java:19)
我可以解決此通過使PackagePrivate
公衆,但不是很大的
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.when;
import org.junit.Test;
public class ExampleJunit {
@Test
public void testStaticConstructorInnerClass() {
final Public comparable = mock(Public.class);
when(comparable.dontCallMe()).thenReturn(1);
when(comparable.dontCallMeSuper()).thenReturn(1);
}
}
結果。有沒有什麼辦法讓我在PackagePrivate類中實現方法?
不錯,不幸的是,我嘲笑的實際代碼比這個例子複雜得多,我不能模擬這個接口。 –
我追加了更多的答案。 – cybersam