0

내 응용 프로그램에 대한 테스트 사례를 작성하고 있지만 사소한 문제가 발생했습니다. 많은 테스트 케이스에서 뷰에 모든 데이터를로드하고 화면에 표시하기 위해 호출이 SystemClock.Sleep입니다. 그러나 이것을하기위한 수면의 횟수가 점점 더 커져서 이러한 검사의 시간이 더 길어졌습니다. 여기 Andriod Espresso의 SystemClock.sleep의 대안

이 시험

@Test 
public void testSearch() { 

    ExtensionForExpresso.signUp(); 

    SystemClock.sleep(17000); 

    onView(withId(R.id.menu_offer_search)).check(matches(isDisplayed())).perform(click()); 

    SystemClock.sleep(5000); 

    onView(withId(R.id.menu_search)).check(matches(isDisplayed())).perform(typeText("Pizza")); 

    SystemClock.sleep(17000); 

    onView(withId(R.id.searchSectionSeeAllButton)).check(matches(isDisplayed())).perform(click()); 

    SystemClock.sleep(15000); 

    onView(withId(R.id.searchResultsRecyclerView)).check(matches(isDisplayed())).perform(RecyclerViewActions.actionOnItemAtPosition(1, click())); 
} 

보기가 나타날 때까지 기다립니다 수면에 대한 대안이 있는가 중 하나의 예입니다? 아니면 거기에 SystemClock.sleep 전화를 줄이기 위해 추가 할 수있는 방법이나 기능이 있습니까?

많은 감사합니다 :)

답변

0

나는 당신이 IdlingResource을 구현하는 것이 좋습니다 먼저 시스템 애니메이션을 비활성화하십시오. 시스템 애니메이션을 사용하지 않는 가장 쉬운 방법은 this입니다.

SystemClock.sleep() 메서드를 사용할 필요가 없습니다. waitFor(2); // 2 second wait

:

public void waitFor(int seconds) { 
     seconds = seconds < 0 ? 0 : seconds; 
      while (--seconds >= 0) { 
       try { 
        Thread.sleep(1000); 
       } catch (Exception e) { 
        e.printStackTrace(); 
       } 
      } 
} 

는 그런 다음 같은 테스트에서 그것을 호출 할 수 있습니다 대신이 같은 사용자 정의 절전 방법을 구현할 수