2016-09-27 3 views
3

에스프레소를 공부하고 나서 2 주일이 지났으므로 과 intended을 파악할 수 없었습니다. intendingintended은 언제 사용합니까? 제공된 예제 및 온라인 자습서는 도움이되지 않으며 웹을 조사하면 좋지 않은 손상을 입히고 있습니다.에스프레소에서 의도 한 것과 의도 한 것의 차이점은 무엇입니까?

의미 상으로는 왜 intend-ing이고 다른 하나는 intended인데, 이것은 혼란에 더해졌습니다. 이것은 또 다른 Google의 이름을 짓는 실수인가 아니면 나만의 것입니까? 이 두 가지 방법은 실제로 의미가 없습니다.

오해의 사용입니다. 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으로 인 텐트가 시작되었음을 확인하는 것입니다. Intending은 인 텐트가 시작될 때 결과를 반환합니다. Intended를 들어

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

당신이 버튼을 발사, 말, MyActivity를 누르면이 실패하고 당신이 TagListActivity에 대한 intended 테스트 (당신은 의도가 실제로 활동을 시작 않은 경우 확인하려는 경우). 당신이 onActivityResult가 제대로 처리되었는지 테스트 된 경우 Intending을 사용하고 다음과 유사한 ActivityResult 전달할 것, 지금

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

:이 경우에 따라서

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)'이 실제로 검증하지 않았기 때문에 그것이라고 믿습니다. 그리고 그 결과는 인 텐트가 던져지기 전에 설정합니다. 반환됩니다. 인 텐트가 던져지면 * 의도 된대로 * 검증됩니다. – DeeV

+0

감사합니다. 매우 명확합니다. 나는 당신의 답을 편집하여'의도하는 것'에 대해 뭔가를 덧붙여서 지금 시험 할 수있게 만들었습니다. –

관련 문제