1
안드로이드 테스트를 위해 에스프레소 2.2.1을 사용하고 있습니다. 에스프레소가 너무 빨리 실행되기 때문에 몇 가지 테스트 케이스를 실행하고 일부는 실패합니다. 요소가 표시되기 위해로드되지 않으며 테스트 케이스가 실패하는 이유입니다. 이 런을 늦출 수있는 방법이 있습니까?내 에스프레소 테스트 케이스를 늦춰야합니다
안드로이드 테스트를 위해 에스프레소 2.2.1을 사용하고 있습니다. 에스프레소가 너무 빨리 실행되기 때문에 몇 가지 테스트 케이스를 실행하고 일부는 실패합니다. 요소가 표시되기 위해로드되지 않으며 테스트 케이스가 실패하는 이유입니다. 이 런을 늦출 수있는 방법이 있습니까?내 에스프레소 테스트 케이스를 늦춰야합니다
:
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.
predicate.call (하위) 및 Func1 조건자가 오류를 제공하고 있습니다. 거기에 어떤 의존성을 추가 할 필요가 있습니까? 아니면이 두 가지 정의가 있습니까? –
sanketprabhune
아 죄송합니다. 그것은 rxjava에서 왔습니다. 프로젝트에 http://grepcode.com/file/repo1.maven.org/maven2/io.reactivex/rxjava/1.0.13/rx/functions/Func1.java#Func1을 복사하여 붙여 넣기 만하면됩니다. – Divers
uiController.loopMainThreadForAtLeast (50)이 메소드는 주 스레드를 50 밀리 초 동안 루프합니다. – sanketprabhune