2013-03-25 51 views
1

我有一個應用程序與幾個活動與列表視圖,第一個列表視圖的選擇決定第二個列表視圖的內容,第二個列表視圖決定第三個的內容等。使用Robotium與意圖

我想測試第三個列表視圖,但因爲它需要一個意圖列表不返回任何內容。爲了解決這個問題,我可以手動添加意圖的測試,是否意味着它的工作原理

public InspectionListActivityTest() { 
    super(InspectionListActivity.class); 
    Intent i = new Intent(); 
    i.putExtra("guid", "abcbbf2b-5e14-4cb1-af1b-e3084b45d4cf"); 
    setActivityIntent(i); 
} 

正如你可以從代碼中看到,它使用GUID來確定列表這是我想要的東西,以避免 - 我清除數據庫很多,而我正在測試,所以我必須一直改變這個領域。

理想我想使用一個ContentResolver的獲得首先從另一臺則這將意味着我將能夠隨時拉回來的信息在我的測試GUID,請即

public InspectionListActivityTest() { 
    super(InspectionListActivity.class); 

    ContentResolver cr = getActivity().getContentResolver(); 
    Cursor cursor = cr.query(Locations.CONTENT_URI, null, null, null, null); 
    if (cursor != null) { 
     if (cursor.moveToFirst()) { 
      String guid = cursor.getString(cursor.getColumnIndex(Locations.GUID)); 
      Intent i = new Intent(); 
      i.putExtra(IntentFilters.LOCATION.getIntent(), guid); 
      setActivityIntent(i); 
     } 
    } 
} 

不過,我得到一個NullPointerException在getActivity()方法上,我似乎無法將此setActivityIntent放在其他任何地方。

回答

0

它可以完成,但有點混亂。基本上從我想要的數據庫中獲得了指導,爲原始測試類創建了一個新的意圖,附加了指導意圖,然後開始了意圖。

public void setUp() throws Exception { 
    super.setUp(); 

    solo = new Solo(getInstrumentation(), getActivity()); 

    activity = getActivity(); 

    UsefulFunctions.insertDummyData(getActivity()); 

    ContentResolver cr = getActivity().getContentResolver(); 
    Cursor cursor = cr.query(Locations.CONTENT_URI, null, null, null, null); 

    if (cursor != null) { 
     if (cursor.moveToFirst()) { 
      guid = cursor.getString(cursor.getColumnIndex(Locations.GUID)); 

     } 
    } 

    solo.goBack(); 

    Intent i = new Intent(activity.getApplicationContext(), InspectionListActivity.class); 
    i.putExtra(IntentFilters.LOCATION.getIntent(), guid); 
    setActivityIntent(i); 
    activity.startActivity(i); 


} 

在某種程度上,它只是更容易開始我的第一個列表,然後得到Robotium到列表中一路一下來,我想在屏幕上,即

solo.clickInList(0); 

// Locations 
solo.clickInList(0); 

ListView ls = solo.getCurrentListViews().get(0); 

solo.waitForActivity("InspectionListActivity"); 
0

這一切都應該在測試的setup()方法中完成,而不是在它的構造函數中完成。測試的構造者是無用的,應該保持不變。

+0

謝謝,現在唯一的問題是如果我將它全部移到setup(),那麼活動意圖需要在第一次調用getActivity()之前設置(請參閱http://developer.android.com/reference/android/test/ActivityInstrumentationTestCase2。 html#setActivityIntent(android.content.Intent))但我需要getActivity()來獲得ContentResolver,除非有另一種方式...? – 2013-03-26 10:24:01

+0

您可以使用http://developer.android.com/reference/android/test/ActivityInstrumentationTestCase2.html#setActivityIntent(android.content.Intent) – Snicolas 2013-03-26 13:45:34