使用Mockito在Android小部件中存根方法

时间:2014-05-19 09:27:02

标签: java android junit mockito

我想在自定义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

来自isLayoutModeOptical的方法ViewGroup具有包级别的可见性,因此Mockito无法从代理对象中调用它。

有没有办法解决这个错误?

1 个答案:

答案 0 :(得分:0)

您可以尝试添加:

    doReturn(true).when(widget).isLayoutModeOptical();

Mockito也应该能够模拟包级别方法:)