1

しばらく探し回っていますが、答えが見つかりません。次のような onCreate メソッドを使用したこのアクティビティがあるとします。

private ListView mListView;

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main_view);
    mListView = (ListView) findViewById(R.id.list_view);
}

そして、ActivityInstrumentationTestCase2 を拡張するテスト クラスがあります。テスト中のアクティビティで onCreate(null) を呼び出したら、setContentView が呼び出されて適切なリソースに設定されているかどうかをテストするにはどうすればよいですか?

private someActivity mActivity;
protected void setUp() throws Exception {
  super.setUp();
  mActivity = getActivity();
}

public void testOnCreate() {
  assertNull(mActivity.findViewById(R.id.list_view));
}
4

2 に答える 2

1

次のコードは、を使用してビュー セットを返す必要がありますsetContentView()

View getContentView() {
    ViewGroup view = (ViewGroup) getWindow().getDecorView();
    view.getChildAt(0);
}

編集:

または、レイアウトの最上位ビューに ID が設定されている場合findViewById(rootId)は、テスト コードで null 以外が返されるかどうかを確認できます。

于 2012-07-25T17:21:17.387 に答える
1

少し異なるアプローチに従います。以前はレイアウトのルート要素に id を追加し、以下のように robolectric ユニット テストでアサートしていました。

たとえば、以下のレイアウト xml を考えてみましょう (id android:id="@+id/test_layout_root"に注意してください)。

<?xml version="1.0" encoding="utf-8"?>
<TableLayout xmlns:android="http://schemas.android.com/apk/res/android"
         android:id="@+id/test_layout_root"
         android:layout_height="match_parent"
         android:layout_width="wrap_content"
         ...
         ...
</TableLayout>

robolectric 単体テスト コード :

assertEquals(R.id.test_layout_root, shadowOf(testActivity).getContentView().getId());

詳細については、私のブログ
http://ckarthik17-tech.blogspot.in/2013/04/robolectric-testing-setcontentview.htmlをご覧ください。

于 2013-04-20T18:00:10.963 に答える