我想在自定义Android Widget中存根一些方法来测试它。我做了一个测试用例:
public class FooWidgetTest extends AndroidTestCase {
@Override
protected void setUp() throws Exception {
super.setUp();
System.setProperty("dexmaker.dexcache", getContext().getCacheDir().getPath());
}
public void testMeasure() {
final FooWidget widget = spy(new FooWidget(getContext()));
//doReturn(42).when(widget).getFoo();
widget.measure(makeMeasureSpec(100, EXACTLY), makeMeasureSpec(80, AT_MOST));
assertEquals(100, widget.getMeasuredWidth());
assertEquals(80, widget.getMeasuredHeight());
}
}
这里我使用Mockito创建一个间谍,并调用measure
来测试onMeasure
的实现。当调用measure
时,我收到以下错误:
java.lang.IllegalAccessError: tried to access method com.foo.widget.FooWidget.isLayoutModeOptical:()Z from class FooWidget_Proxy
ViewGroup
中的方法isLayoutModeOptical
具有包级可见性,因此Mockito不能从代理对象调用它。
有办法解决这个错误吗?
您可以尝试添加:
doReturn(true).when(widget).isLayoutModeOptical();
Mockito也应该能够模拟包级别的方法:)