2016-08-18 11 views
1

에 애니메이션을 해제하는 방법 이미 괴짜을 방지하기 위해 다음 단계를 에스프레소 단위 테스트 : 코드

을했다, 우리는 매우 당신이 테스트에 사용 된 가상 또는 물리적 장치 (들)에 시스템 애니메이션을 해제하는 것이 좋습니다.
창 애니메이션 배율
전환 애니메이션 배율
애니메이터 시간 규모

는하지만 어딘가에 내 코드에서 나는이

을 사용

설정 - 아래 장치에

,> 개발자 옵션은 다음 3 설정을 해제

animation = new RotateAnimation(0f, 360f, Animation.RELATIVE_TO_SELF, 0.5f, Animation.RELATIVE_TO_SELF, 0.5f); 
animation.setInterpolator(new LinearInterpolator()); 
animation.setRepeatCount(Animation.INFINITE); 
animation.setDuration(5000); 
imageScanLogo.startAnimation(animation); 

내 에스프레소 테스트 수업에서는

와 함께 해당보기를 클릭합니다.
onView(withId(R.id.imageScanLogo)).perform(click()); 

그 시점에서 멈추고 더 이상 진행되지 않습니다. 코드에서 애니메이션을 주석 처리하면 정상적으로 작동합니다. 이것은 스택 트레이스입니다. 뷰를 클릭 할 수는 없다고 말하지만 실제로 클릭 한 상태이며 더 이상 테스트를 진행하지 않았습니다.

android.support.test.espresso.PerformException: Error performing 'single click - At Coordinates: 539, 946 and precision: 16, 16' on view 'with id: com.android.x.y/imageScanLogo'. 
at android.support.test.espresso.PerformException$Builder.build(PerformException.java:83) 
at android.support.test.espresso.base.DefaultFailureHandler.getUserFriendlyError(DefaultFailureHandler.java:80) 
at android.support.test.espresso.base.DefaultFailureHandler.handle(DefaultFailureHandler.java:56) 
at android.support.test.espresso.ViewInteraction.runSynchronouslyOnUiThread(ViewInteraction.java:184) 
at android.support.test.espresso.ViewInteraction.doPerform(ViewInteraction.java:115) 
at android.support.test.espresso.ViewInteraction.perform(ViewInteraction.java:87) 
at com.android.x.y.BaseTests.scanTagsAndUpload(BaseTests.java:88) 
at com.android.x.y.CleanScanTest.scan(CleanScanTest.java:61) 
at java.lang.reflect.Method.invoke(Native Method) 
at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:50) 
at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12) 
at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:47) 
at org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:17) 
at org.junit.internal.runners.statements.RunBefores.evaluate(RunBefores.java:26) 
at android.support.test.internal.statement.UiThreadStatement.evaluate(UiThreadStatement.java:55) 
at android.support.test.rule.ActivityTestRule$ActivityStatement.evaluate(ActivityTestRule.java:270) 
at org.junit.rules.RunRules.evaluate(RunRules.java:20) 
at org.junit.runners.ParentRunner.runLeaf(ParentRunner.java:325) 
at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:78) 
at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:57) 
at org.junit.runners.ParentRunner$3.run(ParentRunner.java:290) 
at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:71) 
at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:288) 
at org.junit.runners.ParentRunner.access$000(ParentRunner.java:58) 
at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:268) 
at org.junit.runners.ParentRunner.run(ParentRunner.java:363) 
at org.junit.runners.Suite.runChild(Suite.java:128) 
at org.junit.runners.Suite.runChild(Suite.java:27) 
at org.junit.runners.ParentRunner$3.run(ParentRunner.java:290) 
at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:71) 
at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:288) 
at org.junit.runners.ParentRunner.access$000(ParentRunner.java:58) 
at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:268) 
at org.junit.runners.ParentRunner.run(ParentRunner.java:363) 
at org.junit.runner.JUnitCore.run(JUnitCore.java:137) 
at org.junit.runner.JUnitCore.run(JUnitCore.java:115) 
at android.support.test.internal.runner.TestExecutor.execute(TestExecutor.java:59) 
at android.support.test.runner.AndroidJUnitRunner.onStart(AndroidJUnitRunner.java:262) 
at android.app.Instrumentation$InstrumentationThread.run(Instrumentation.java:1879) 
Caused by: android.support.test.espresso.AppNotIdleException: Looped for 4864 iterations over 30 SECONDS. The following Idle Conditions failed . 
at android.support.test.espresso.IdlingPolicy.handleTimeout(IdlingPolicy.java:61) 
at android.support.test.espresso.base.UiControllerImpl.loopUntil(UiControllerImpl.java:480) 
at android.support.test.espresso.base.UiControllerImpl.loopUntil(UiControllerImpl.java:411) 
at android.support.test.espresso.base.UiControllerImpl.injectMotionEvent(UiControllerImpl.java:229) 
at android.support.test.espresso.action.MotionEvents.sendUp(MotionEvents.java:138) 
at android.support.test.espresso.action.MotionEvents.sendUp(MotionEvents.java:118) 
at android.support.test.espresso.action.Tap.sendSingleTap(Tap.java:135) 
at android.support.test.espresso.action.Tap.access$100(Tap.java:35) 
at android.support.test.espresso.action.Tap$1.sendTap(Tap.java:40) 
at android.support.test.espresso.action.GeneralClickAction.perform(GeneralClickAction.java:98) 
at android.support.test.espresso.ViewInteraction$1.run(ViewInteraction.java:144) 
at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:423) 
at java.util.concurrent.FutureTask.run(FutureTask.java:237) 
at android.os.Handler.handleCallback(Handler.java:739) 
at android.os.Handler.dispatchMessage(Handler.java:95) 
at android.os.Looper.loop(Looper.java:148) 
at android.app.ActivityThread.main(ActivityThread.java:5417) 
at java.lang.reflect.Method.invoke(Native Method) 
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726) 
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616) 

내 시간 제한 정책은 테스트를 위해 사용 안 함 애니메이션을 내가 코드에서 모든 단일 애니메이션을 언급하지 않으려는이

@Before 
    public void resetTimeout() { 
     IdlingPolicies.setMasterPolicyTimeout(30, TimeUnit.SECONDS); 
     IdlingPolicies.setIdlingResourceTimeout(20, TimeUnit.SECONDS); 
    } 

같이 설정하고 또한 일부 플래그 구축을 시작 여부/사용되지 않는다 .

답변

1

에스프레소는 애플리케이션이 유휴 상태 일 때 뷰에 대한 유효성 검사를 수행합니다 (모든 AsyncTask가 완료되었습니다). 기본적으로 60 초를 기다렸다가 throw합니다. AppNotIdleException,이 시간이 30 초로 변경되었습니다.이 시간 동안 앱이 아직 유휴 상태가 아니므로 더 높은 값으로 변경하십시오.

+0

아무 것도 변경하지 않습니다. 애니메이션을 주석 처리 할 때 작동합니다. –

+0

예, 애니메이션이 완료되는 데 최대 30 초가 걸릴 수 있으므로 앱이 유휴 상태가 아니라고 생각합니다. 30 초 이상을 Ex : 60s, 90s로 변경하고 다시 확인하십시오 – Binngokute

+1

무한합니다. –

1

the preferred animation method since Honeycomb (3.0) 대신 Animator API를 사용해보세요.

ObjectAnimator anim = ObjectAnimator.ofInt(imageScanLogo, "rotation", 0, 360); 
anim.setRepeatCount(ValueAnimator.INFINITE); 
animation.setInterpolator(new LinearInterpolator()); 
animation.setDuration(5000); 
anim.start(); 

아마도 Espresso는 이전 애니메이션 API를 확인하지 않거나 개발자 설정에서 애니메이션을 사용 중지하는 것은 이전 애니메이션에는 적용되지 않습니다.