使用Mockito的Android小部件的存根方法



我想在自定义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也应该能够模拟包级别的方法:)

相关内容

  • 没有找到相关文章

最新更新