Android单元测试,用于测试是否在onCreate()中调用setContentView()

时间:2012-07-25 16:49:18

标签: android android-activity android-view android-testing

一直在寻找一段时间但找不到答案。假设我使用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));
}

2 个答案:

答案 0 :(得分:1)

以下代码应使用setContentView()返回视图集:

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

修改

或者,如果布局中的顶级视图设置了其ID,则可以检查测试代码中findViewById(rootId)是否返回非空。

答案 1 :(得分: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());

您可以在我的博客上获取更多详情<{3}}