को देखते हुए मैं एक साधारण ListFragment विकासशील कर रहा हूँ इस तरह (इस मामले में, यह Mediastore से कलाकारों की एक सूची पढ़ता है, लेकिन यह भी बाद में एक अलग स्रोत से डेटा पढ़ा जाएगा):Robolectric और Mockito
@EFragment
public class ArtistsFragment extends ListFragment implements LoaderManager.LoaderCallbacks<Cursor> {
private static final String TAG = ArtistsFragment.class.getName();
private SimpleCursorAdapter mAdapter;
Uri uri = MediaStore.Audio.Artists.EXTERNAL_CONTENT_URI;
CursorLoader mCursorLoader;
@AfterViews
void setupView() {
mAdapter = new SimpleCursorAdapter(getActivity(),
android.R.layout.simple_list_item_1, null,
new String[]{MediaStore.Audio.Artists.ARTIST}, // lists path of files
new int[]{android.R.id.text1}, 0);
setListAdapter(mAdapter);
getLoaderManager().initLoader(0, null, this);
}
@Override
public Loader<Cursor> onCreateLoader(int id, Bundle args) {
if (mCursorLoader == null) {
mCursorLoader = new CursorLoader(getActivity(), uri, new String[]{MediaStore.Audio.Artists._ID, MediaStore.Audio.Artists.ARTIST},
null, null, MediaStore.Audio.Artists.ARTIST + " ASC");
} else {
System.out.println("mCursorLoader.count: " + mCursorLoader.loadInBackground().getCount());
}
return mCursorLoader;
}
@Override
public void onLoadFinished(Loader<Cursor> loader, Cursor data) {
setListShown(true);
mAdapter.swapCursor(data);
}
@Override
public void onLoaderReset(Loader<Cursor> loader) {
mAdapter.swapCursor(null);
}
}
मैं सबूत टुकड़ा विभिन्न स्थितियों पर ठीक से बर्ताव करता है (उदाहरण के लिए खाली सूची या अमान्य डेटा आदि) के लिए Robolectric + Mockito + awaitility उपयोग करना चाहते हैं। मेरा परीक्षण वर्ग इस तरह दिखता है: जब इंटेलीजे में इस परीक्षण चल रहे हैं या maven परीक्षण असफल हो जायेगी तब
@RunWith(RobolectricTestRunner.class)
public class ArtistsFragmentTest {
@Test
public void shouldNotBeNull() {
final ArtistsFragment myFragment = ArtistsFragment_.builder().build();
assertNotNull(myFragment);
// Create a mock cursor.
final Cursor mc = getSampleArtistCursor();
when(mc.getCount()).thenReturn(1);
when(mc.getInt(0)).thenReturn(1);
when(mc.getString(1)).thenReturn("Sample Title");
myFragment.mCursorLoader = mock(CursorLoader.class);
when(myFragment.mCursorLoader.loadInBackground()).thenReturn(mc);
startFragment(myFragment);
assertNotNull(myFragment.getListView());
await().atMost(5, TimeUnit.SECONDS).until(new Callable<Integer>() {
@Override
public Integer call() throws Exception {
return myFragment.getListAdapter().getCount();
}
}, equalTo(1));
System.out.println(myFragment.getListAdapter().getCount());
}
private Cursor getSampleArtistCursor() {
return new CursorWrapper(mock(MockCursor.class));
}
}
, अनुकूलक हमेशा शून्य की गिनती वापस आ जाएगी।
ऑनरेट लोडर में System.out.println कथन हालांकि देता है। क्या मुझे पृष्ठभूमि थ्रेड में मॉकिटो के लिए विशेष देखभाल करने की आवश्यकता है? (loadInBackground विधि एक कार्यकर्ता थ्रेड पर चलता है)।
क्या आप मुझे पूरा यूनिट टेस्ट क्लास दे सकते हैं? मुझे भी एक ही समस्या का सामना करना पड़ रहा है और उसी कर्सरलोडर का उपयोग कर रहा हूं। – user2566484