2017-01-18 8 views
1

안드로이드 테스트를 위해 에스프레소 2.2.1을 사용하고 있습니다. 에스프레소가 너무 빨리 실행되기 때문에 몇 가지 테스트 케이스를 실행하고 일부는 실패합니다. 요소가 표시되기 위해로드되지 않으며 테스트 케이스가 실패하는 이유입니다. 이 런을 늦출 수있는 방법이 있습니까?내 에스프레소 테스트 케이스를 늦춰야합니다

답변

1
당신은 ID로보기 기다리거나 텍스트 또는 무엇 이건 볼 것입니다 특정 정규 만들 수 있습니다

:

onView(isRoot()).perform(EspressoTestUtil.waitViewWithMatcher(v -> withId(R.id.view_id).matches(v), 30000)); 

그것은 ID로보기 기다립니다 :

public static ViewAction waitViewWithMatcher(Func1<View, Boolean> predicate, final long millis) { 
    return new ViewAction() { 
     @Override 
     public Matcher<View> getConstraints() { 
      return isRoot(); 
     } 

     @Override 
     public String getDescription() { 
      return "wait for a specific during " + millis + " millis."; 
     } 

     @Override 
     public void perform(final UiController uiController, final View view) { 
      uiController.loopMainThreadUntilIdle(); 
      final long startTime = System.currentTimeMillis(); 
      final long endTime = startTime + millis; 

      do { 
       for (View child : TreeIterables.breadthFirstViewTraversal(view)) { 
        if (predicate.call(child)) { 
         return; 
        } 
       } 

       uiController.loopMainThreadForAtLeast(50); 
      } 
      while (System.currentTimeMillis() < endTime); 

      throw new PerformException.Builder() 
        .withActionDescription(this.getDescription()) 
        .withViewDescription(HumanReadables.describe(view)) 
        .withCause(new TimeoutException()) 
        .build(); 
     } 
    }; 
} 

그런 다음 당신이 원하는 사용할 수 있습니다 view_id, 30000 ms.

+0

predicate.call (하위) 및 Func1 조건자가 오류를 제공하고 있습니다. 거기에 어떤 의존성을 추가 할 필요가 있습니까? 아니면이 두 가지 정의가 있습니까? – sanketprabhune

+0

아 죄송합니다. 그것은 rxjava에서 왔습니다. 프로젝트에 http://grepcode.com/file/repo1.maven.org/maven2/io.reactivex/rxjava/1.0.13/rx/functions/Func1.java#Func1을 복사하여 붙여 넣기 만하면됩니다. – Divers

+0

uiController.loopMainThreadForAtLeast (50)이 메소드는 주 스레드를 50 밀리 초 동안 루프합니다. – sanketprabhune

관련 문제