I was following the tutorial from Android developer. Right now my class looks like this:
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());
}
}
If I try to run a test like the following, I'm getting a NullPointerException on the first getDataPicker()
. I want to check that the default date is today.
@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));
}
I would like to be able to test this class without using it inside an activity (in that case I believe I can use the buildActivity
method and then ShadowDatePickerDialog
but that's the next step).
So, is it possible to test the datePicker? I'm using robolectric 2.2
It works with the new version Robolectric 3.X. You can try something like this:
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());
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With