AndroidTestCaseでListViewに子Viewを生成させる方法


ListViewのテストをやろうと思ったら、なかなか子viewを生成してくれなくて困った。

ちなみにAndroidTestCaseでは、adapter.notifyDataSetChanged()を呼んでもListViewは更新されないので、データに変更がある度に下記の処理を呼ぶ必要がある。
listViewHeightには子viewを表示するのに十分なサイズを指定すること。

public static void updateListViewChild( ListView listView, int listViewWidth, int listViewHeight ){

    int widthMeasureSpec =  MeasureSpec.makeMeasureSpec( listViewWidth,  MeasureSpec.EXACTLY );
    int heightMeasureSpec = MeasureSpec.makeMeasureSpec( listViewHeight, MeasureSpec.AT_MOST );

    listView.forceLayout();
    listView.measure( widthMeasureSpec, heightMeasureSpec );
    listView.layout( 0, 0, listView.getMeasuredWidth(), listView.getMeasuredHeight() );
}


public void testListViewChild(){
    ListView listView = new ListView( getContext() );
    listView.setAdapter( mAdapter );

    updateListViewChild( listView, 800, 600 );

    assertEquals( mAdapter.getCount(), listView.getChildCount() );
}