3
我正在關注Android開發人員的教程。現在我的課看起來是這樣的:有沒有辦法用Robolectric測試拾取器?
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());
}
}
如果我嘗試運行類似下面的測試,我在第一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
但這是下一步)。
那麼,是否有可能測試datePicker?我正在使用robolectric 2.2
我相信這是Robolectric中的一個問題,如果我可以找到一些時間來解決它的話,它就在我的待辦事項清單上。 –
目前,首先構建一個活動是解決這個空指針問題的正確解決方案嗎? – dierre
我的意思是我想嵌入datepicker的真實活動,因此用佈局開始一個FragmentActivity。 – dierre