2013-10-29 29 views
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

+0

我相信這是Robolectric中的一個問題,如果我可以找到一些時間來解決它的話,它就在我的待辦事項清單上。 –

+0

目前,首先構建一個活動是解決這個空指針問題的正確解決方案嗎? – dierre

+0

我的意思是我想嵌入datepicker的真實活動,因此用佈局開始一個FragmentActivity。 – dierre

回答

1

它適用於新版本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()); 
相關問題