Android 有没有办法用机器人分子测试采摘器?

Android 有没有办法用机器人分子测试采摘器?,android,unit-testing,robolectric,Android,Unit Testing,Robolectric,我在遵循Android开发者的教程。现在我的班级是这样的: public class DatePickerFragment extends DialogFragment implements DatePickerDialog.OnDateSetListener { final Calendar calendar = Calendar.getInstance(); @Override public Dialog onCreateDialog(Bundle

我在遵循Android开发者的教程。现在我的班级是这样的:

public class DatePickerFragment extends DialogFragment implements
        DatePickerDialog.OnDateSetListener {

    final Calendar calendar = Calendar.getInstance();

    @Override
    public Dialog onCreateDialog(Bundle savedInstanceState) {
        return new DatePickerDialog(getActivity(), this,
                calendar.get(Calendar.YEAR), calendar.get(Calendar.MONTH),
                calendar.get(Calendar.DAY_OF_MONTH));
    }

    @Override
    public void onDateSet(DatePicker view, int year, int month, int day) {
        calendar.set(year, month, day);
        Datable datable = (Datable) view.getContext();
        datable.setDate(calendar.getTime());
    }

}
    startDate.performClick();
    DatePickerDialog dialog = (DatePickerDialog) ShadowDatePickerDialog.getLatestDialog();
    dialog.updateDate(2013, 10, 23);
    dialog.getButton(DatePickerDialog.BUTTON_POSITIVE).performClick();
    assertEquals("2013-11-23", startDate.getText().toString());
如果我尝试运行下面这样的测试,我会在第一个
getDataPicker()
上得到一个NullPointerException。我想检查默认日期是否为今天

@Test
public void testDatePickerFragment() {
    final Calendar calendar = Calendar.getInstance();
    int expectedYear = calendar.get(Calendar.YEAR);
    int expectedMonth = calendar.get(Calendar.MONTH);
    int expectedDay = calendar.get(Calendar.DAY_OF_MONTH);

    DatePickerFragment fragment = new DatePickerFragment();

    FragmentActivity activity = Robolectric
            .buildActivity(FragmentActivity.class).create().start()
            .resume().get();

    FragmentManager fragmentManager = activity.getSupportFragmentManager();
    FragmentTransaction fragmentTransaction = fragmentManager
            .beginTransaction();
    fragment.show(fragmentManager, "datePicker");
    fragmentTransaction.commit();

    DatePickerDialog dialog = (DatePickerDialog) ShadowDatePickerDialog
            .getLatestDialog();

    assertThat(dialog, is(not(nullValue())));

    assertThat(dialog.getDatePicker().getDayOfMonth(), is(expectedDay));
    assertThat(dialog.getDatePicker().getMonth(), is(expectedMonth));
    assertThat(dialog.getDatePicker().getYear(), is(expectedYear));
}
我希望能够在不在活动中使用它的情况下测试这个类(在这种情况下,我相信我可以使用
buildActivity
方法,然后使用
ShadowDatePickerDialog
,但这是下一步)


那么,可以测试日期选择器吗?我正在使用robolectric 2.2,它与新版本robolectric 3.X配合使用。您可以尝试以下方法:

public class DatePickerFragment extends DialogFragment implements
        DatePickerDialog.OnDateSetListener {

    final Calendar calendar = Calendar.getInstance();

    @Override
    public Dialog onCreateDialog(Bundle savedInstanceState) {
        return new DatePickerDialog(getActivity(), this,
                calendar.get(Calendar.YEAR), calendar.get(Calendar.MONTH),
                calendar.get(Calendar.DAY_OF_MONTH));
    }

    @Override
    public void onDateSet(DatePicker view, int year, int month, int day) {
        calendar.set(year, month, day);
        Datable datable = (Datable) view.getContext();
        datable.setDate(calendar.getTime());
    }

}
    startDate.performClick();
    DatePickerDialog dialog = (DatePickerDialog) ShadowDatePickerDialog.getLatestDialog();
    dialog.updateDate(2013, 10, 23);
    dialog.getButton(DatePickerDialog.BUTTON_POSITIVE).performClick();
    assertEquals("2013-11-23", startDate.getText().toString());

我相信这是Robolectric中的一个问题,如果我能找到时间解决的话,我会把它列在我的待办事项清单上。目前,首先构建一个活动是解决这个空指针问题的正确解决方案?我指的是我想要嵌入日期选择器的真实活动,所以开始一个带有布局的碎片活动。对此有任何更新吗?我在使用FragmentTestUtil.startFragment时遇到了同样的问题。DatePickerDialog.mDatePicker在构造后仍然为空。这看起来像是的副本