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

我们采用了一种稍微不同的方法,我们曾经在布局的根元素中添加一个 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 回答
1

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

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

编辑:

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

于 2012-07-25T17:21:17.387 回答