2012-07-25 108 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

相關問題