2015-03-09 2 views
0

Я пытаюсь проверить GridView, чтобы гарантировать загрузку изображений с помощью Robolectric. GridView.getChildAt(0) возвращает null, даже если в адаптере есть данные. Я понимаю, что это потому, что getChildAt() возвращается в зависимости от того, что показано на экране.GridView.getChildAt возвращает null при тестировании с помощью Robolectric

Есть ли способ получить этот тест, работающий в Robolectric, или мне нужно перейти на тестирование на устройстве (например, с эспрессо)?

@RunWith(RobolectricTestRunner.class) 
@Config(manifest = "../../src/main/AndroidManifest.xml", emulateSdk = 18, reportSdk = 18) 
public class ImageGridFragmentTest { 

    private ImageGridFragment mImageGridFragment; 

    @Before 
    public void setup() { 
     ShadowLog.stream = System.out; 
     mImageGridFragment = new ImageGridFragment(); 
     startFragment(mImageGridFragment); 
    } 

    @Test 
    public void testImageGridFragmentLoaded() throws Exception { 
     assertNotNull(mImageGridFragment); 
    } 

    @Test 
    public void shouldLoadImageToGrid() throws Exception { 
     GridView gridView = (GridView) mImageGridFragment.getView().findViewById(R.id.gv_image_grid); 
     Log.d("gridView.size", Integer.toString(gridView.getCount())); 

     assertEquals(0, gridView.getFirstVisiblePosition()); 
     View itemView = (View) gridView.getChildAt(0); 
     assertNotNull(itemView); // Test fails here 

     ImageView imageView = (ImageView) itemView.findViewById(R.id.iv_loaded_image); 
     ShadowDrawable shadowDrawable = Robolectric.shadowOf(imageView.getDrawable()); 
     assertEquals(R.drawable.sample_image, shadowDrawable.getCreatedFromResId()); 
    } 
} 
+0

Что такое gridView.size или является адаптером null? Вероятно, 'assertNotNull (gridView.getAdapter());' – petey

+0

GridView.size, возвращаемый Log.d, равен 2. Я добавляю два элемента в адаптер. Адаптер не кажется нулевым (см. Мой ответ). – TTransmit

ответ

0

Это не так тщательно тестирует систему, но может быть лучшим, что можно сделать.

@Test 
public void shouldLoadImageToGrid() throws Exception { 
    GridView gridView = (GridView) mImageGridFragment.getView().findViewById(R.id.gv_image_grid); 

    ImageGridData data = (ImageGridData) gridView.getAdapter().getItem(0); 
    assertEquals((long)R.drawable.sample_image, (long)data.getImageId()); 
} 
Смежные вопросы