使用Robolectric和Mockito模拟findViewById响应

时间:2015-09-15 13:17:22

标签: android unit-testing mocking mockito robolectric

我有一个自定义ListView说CustomListView

在片段中有:

<com.custom.CustomListView
    android:id="@+id/custom_listview"
    android:layout_width="match_parent"
    android:layout_height="match_parent"/>

在该片段的来源中,我有

private CustomListView mCustomListView;

@Override
public void onActivityCreated(Bundle savedInstanceState) {
    super.onActivityCreated(savedInstanceState);
    mContext = getActivity();

    mCustomListView = mContext.findViewById(R.id.custom_listview);
}

然后有一些方法:

public void doSomethingOnReceivingData(Data data) {
    mCustomListView.someCustomMethod(data);
}

我想为doSomethingOnReceivingData(Data)方法编写测试。

我无法弄清楚如何模拟listview以便我可以继续测试(ArgumentCaptors和东西)?

2 个答案:

答案 0 :(得分:1)

我会给列表字段包本地访问并直接在test中模拟它。对于我们的应用程序,它已经可以访问包,因为我们使用 Butterknife

答案 1 :(得分:1)

@RunWith(MockitoJUnitRunner.class)
public class MainActivityFragmentTest {

    @Mock
    private CustomListView mCustomListView;

    @InjectMocks
    private MainActivityFragment fragment;

    @Test
    public void doSomethingOnReceivingData_callsCustomListView() {
        final String data = "data";

        fragment.doSomethingOnReceivingData(data);

        verify(mCustomListView).someCustomMethod(eq(data));
    }

}