GridView.getChildAt returns 使用 Robolectric 测试时为空
GridView.getChildAt returns null when testing with Robolectric
我正在尝试测试 GridView 以确保它使用 Robolectric 加载图像。 GridView.getChildAt(0)
returns null 即使适配器中有数据。我知道这是因为 getChildAt()
returns 基于屏幕上显示的内容。
有没有办法让这个测试在 Robolectric 中运行,或者我是否必须转移到设备上进行测试(例如使用 Espresso)?
@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());
}
}
这不是对系统的彻底测试,但可能是可以完成的最佳测试。
@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());
}
我正在尝试测试 GridView 以确保它使用 Robolectric 加载图像。 GridView.getChildAt(0)
returns null 即使适配器中有数据。我知道这是因为 getChildAt()
returns 基于屏幕上显示的内容。
有没有办法让这个测试在 Robolectric 中运行,或者我是否必须转移到设备上进行测试(例如使用 Espresso)?
@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());
}
}
这不是对系统的彻底测试,但可能是可以完成的最佳测试。
@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());
}