6

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());
    }

}

次のようなテストを実行しようとすると、最初の で NullPointerException が発生しgetDataPicker()ます。デフォルトの日付が今日であることを確認したい。

@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を使用しています

4

1 に答える 1

4

新しいバージョンの Robolectric 3.X で動作します。次のようなことを試すことができます:

    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());
于 2015-04-21T14:14:43.123 に答える