Android 有没有办法用机器人分子测试采摘器?
我在遵循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
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在构造后仍然为空。这看起来像是的副本