2016-09-27 100 views
3

自從我學習濃咖啡2周後,我無法掌握intendingintended。我何時使用intendingintended?所提供的示例和在線教程並沒有幫助和研究網絡對我造成的損害遠遠超過了好處。意式咖啡與意式咖啡之間的區別是什麼?

從語義上講,對於智力參考,爲什麼它是intend-ing和其他intended,這更多地增加了混淆。這是另一個谷歌命名錯誤還是隻是我?這兩種方法確實沒有意義。

我誤解了它的用法。 I wanted to test if my activity A launched activity B。而已。這裏是我的代碼:

@Test 
public void shouldLaunchTagListActivity() 
{ 
    onView(withId(R.id.edittext_description_minimized)) 
      .perform(click()); 

    onView(withId(R.id.linearlayout_add_note_maximize)) 
      .check(matches(isDisplayed())); 

    onView(withId(R.id.relativelayout_quick_action_button)) 
      .check(matches(isDisplayed())); 

    onView(withId(R.id.imagebutton_tag)) 
      .perform(click()); 

    // should I intended or intending here? 
    // ??? 
    intended(toPackage(HomeScreenActivity.class.getName())); 

    onView(withId(R.id.coordinatorlayout_tag_list)) 
      .check(matches(isDisplayed())); 
} 

這個測試總是通過,即使我把目標取代了錯誤的目的。

我可以通過檢查我的目標視圖是否存在並被用戶看到來檢查其他活動是否已啓動。但現在我要運行一個不同的用戶故事,我真的需要檢查活動是否發送請求以啓動另一個活動(我的活動,而不是外部活動)。

任何解釋,非常感謝!

回答

12

區別是Intended只驗證意圖是否啓動(你想要的)。當Intent啓動時,Intending將返回結果。

對於Intended(如果你想檢查是否意圖實際上確實推出的活動)

intended(hasComponent(TagListActivity.class.getName())); 

如果你按下一個按鈕,並推出,也就是說,MyActivity您測試intended爲TagListActivity這將失敗,。這將拋出此以下錯誤:

android.support.test.espresso.base.DefaultFailureHandler$AssertionFailedWithCauseError: Wanted to match 1 intents. Actually matched 0 intents. 

現在,如果你正在測試一個onActivityResult被妥善處理,你會用Intending,並通過類似的ActivityResult這樣:

Intent resultData = new Intent(); 
resultData.putExtra("resultData", "fancyData"); 
ActivityResult result = new ActivityResult(Activity.RESULT_OK, resultData); 

intending(toPackage(HomeScreenActivity.class.getName())).respondWith(result)); 

// Perform action that throws the Intent 
onView(withId(R.id.imagebutton_tag)).perform(click()); 

// Verify your Activity is in the state it should be here. 
在這種情況下

所以,如果您希望「HomeScreenActivity」返回某些內容,則可以使用Intending

+4

你應該是寫官方文檔的人 –

+2

@NeonWarge:爲了回答這個語義問題,我相信這是因爲'intending'實際上並沒有驗證,並且在* Intent被拋出之前設置它,所以結果將被退回。 * Intent被拋出後,'Intended'被驗證*的位置。 – DeeV

+0

謝謝,這很清楚。我會編輯你的答案,增加一些關於「打算」的內容我現在能夠完成我的測試工作。 –