2012-07-25 106 views
0

已经搜索了一段时间但找不到答案。比方说,我有onCreate方法本次活动是这样的:Android单元测试测试是否在onCreate()中调用了setContentView()

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测试类。我如何测试setContentView是否被调用,并且一旦我在测试中的activity上调用onCreate(null)时将其设置为正确的资源?

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

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

回答

0

下面的代码应该使用setContentView()返回查看设置:

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

编辑:

另一方面,如果在布局的顶层视图都有它的ID集,可以检查findViewById(rootId)在您的测试代码中是否返回非null。

+0

我刚才尝试了您的替代解决方案。不知何故,assertNull失败之前,我打电话创建 – JackWang 2012-07-25 17:37:02

+0

@ user1524355发布整个测试代码。 – 2012-07-25 17:40:58

+0

编辑.............. – JackWang 2012-07-25 17:51:57

0

我们遵循一个稍微不同的方法,我们用一个ID添加到布局的根元素和robolectric单元测试断言如下

例如,请考虑下面的布局XML(注意ID 机器人: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()); 

您CA n在我的博客上获取更多详情
http://ckarthik17-tech.blogspot.in/2013/04/robolectric-testing-setcontentview.html

相关问题