2015-05-14 11 views
7

sırasında "Animatörler Looper parçacığı üzerinde sadece çalıştırmak olabilir" altında. Sonuçta, bir tıklama gerçekleştirdiğimde, bazı intrumentation testleri uygulamayı denediğimde uygulama çöküyor. Sistem geliştiricileri seçeneklerinde animasyonu kapatmayı denedim ancak yardımcı olmadı.Bu benim test kodu üzerinde cihazlı intrumentation testi

android.util.AndroidRuntimeException: Canlandırma sadece android.animation.ValueAnimator.start de android.animation.ValueAnimator.start (ValueAnimator.java:1002) (ValueAnimator.java de Lüper parçacığı üzerinde çalıştırılabilir : 1050) 'da android.animation.ObjectAnimator.start (ObjectAnimator.java:829) adresinden android.animation.AnimatorSet.start (AnimatorSet.java:585) adresinden android.animation.StateListAnimator.start (StateListAnimator.java:187)) , android.animation.StateListAnimator.setState (StateListAnimator.java:180) at android.view.View.drawableStateChanged ( android.widget.TextView.drawableStateChanged (TextView.java:3659) adresinden android.view.View.refreshDrawableState (View.java:16032) adresindeki numaralı telefondan (View.java:15988) android.view.View.setEnabled 'ı görüntüleyin. java: 6724) 'da android.widget.TextView.setEnabled (TextView.java:1446) at my.app.ui.fragments.welcome.LoginFragment.unlock (LoginFragment.java:263) my.app.ui .fragments.welcome.LoginFragment $ 4.success my.app.ui.fragments.welcome.LoginFragment $ 4.success de (LoginFragment.java:224) (LoginFragment.java:222) my.app.WelcomeActivityTests.testRate de (WelcomeActivityTests.java:84) at java.lang.reflect.Method.invoke (Yerel Yöntem) at org.junit.internal.runners.model de org.junit.runners.model.FrameworkMethod $ 1.runReflectiveCall (FrameworkMethod.java:45) dejava.lang.reflect.Method.invoke (Method.java:372) org.junit.internal.runners.statements.InvokeMethod.evaluate de .ReflectiveCallable.run org.junit.runners.model.FrameworkMethod.invokeExplosively (FrameworkMethod.java:42) 'den (ReflectiveCallable.java:15) (InvokeMethod .Java: 20) org.junit.internal.runners.statements.RunAfters.evaluate de org.junit.internal.runners.statements.RunBefores.evaluate (RunBefores.java:28) de (RunAfters.java:30 , ve roid.support.test.internal.statement.UiThreadStatement.evaluate (UiThreadStatement.java:55) adresinde android.support.test.rule.ActivityTestRule $ ActivityStatement.evaluate (ActivityTestRule.java:257) org.junit.rules adresinde de .RunRules.evaluate org.junit.runners.BlockJUnit4ClassRunner.runChild (BlockJUnit4ClassRunner.java:68) en org.junit.runners.ParentRunner.runLeaf (ParentRunner.java:263) 'den (RunRules.java:18) org.junit.runners.BlockJUnit4ClassRunner.runChild (BlockJUnit4ClassRunner.java:47) , org.junit.runners.ParentRunner $ 3.run (ParentRunner.java:231) adresinde org.junit.runners.ParentRunner $ 1.schedule (ParentRunner. java: 60) org.junit.runners.ParentRunner.runChildren (ParentRunner.java:229) org.junit.runners.ParentRunner.access $ 000 (ParentRunner.java:50) adresinden org.junit.runners.ParentRunner $ 2.evaluate (ParentRunner.java:222) adresinden org.junit.runners.ParentRunner.run (ParentRunner.java: 300) org.junit.runners.Suite.runChild (Suite.java:128) adresinde org.junit.runners.Suite.runChild (Suite.java:24) org.junit.runners.ParentRunner $ 3 kuruluşta Açık org.junit.runners.ParentRunner.runChildren (ParentRunner.java:229) de org.junit.runners.ParentRunner $ 1.schedule (ParentRunner.java:60) de .run (ParentRunner.java:231). adresindeki junit.runners.ParentRunner.access $ 000 (ParentRunner.java:50) org.junit.runners.ParentRunner $ 2.evaluate (ParentRunner.java:222) org.junit.runners.ParentRunner.run (ParentRunner.java: 300) org.junit.runner.JUnitCore.run (JUnitCore.java:157) 'de org.junit.runner.JUnitCore.run (JUnitCore.java:136) adresinde numaralı telefondan numaralı telefondan android.support.test.internal android.app.Instrumentation $ InstrumentationThread.run de .runner.TestExecutor.execute android.support.test.runner.AndroidJUnitRunner.onStart (AndroidJUnitRunner.java:228) 'den (TestExecutor.java:54) (Instrumentation.java :

btnFacebook.setEnabled(false); 

Edit: 1853)

Bu hat benim app çöküyor ki, ben kabul cevap arayın uygun çözüm buldu.

cevap

9

Tamam, uygun bir çözüm buldu! İşleyicileri'u kullanan kütüphaneler ve apislerle çalışırken, test durumlarınıza @UiThreadTest ile not eklemeniz gerekir. Ayrıca, her asynchronouos geri arama, runOnMainSync (Runnable r) Enstrümantasyon yöntemi kullanılarak çağrılmalıdır. Örnek:

@Test 
    @UiThreadTest 
    public void testLoginSuccess() { 

     Instrumentation.ActivityMonitor monitor = InstrumentationRegistry.getInstrumentation().addMonitor(EventsListActivity.class.getName(), null, true); 

     onView(withId(R.id.btnLogInW)).perform(click()); 
     onView(withId(R.id.email)).perform(typeText("[email protected]")); 
     onView(withId(R.id.passL)).perform(typeText("strong.password")); 
     onView(withId(R.id.btnLogInL)).perform(click()); 

     User user = new User(); 
     user.first_name = "Fake name"; 
     user.last_name = "Fake name"; 
     user.id = 1; 
     user.email = "[email protected]"; 

     final AuthResponse authResponse = new AuthResponse(); 
     authResponse.api_key = "fake_api_key"; 
     authResponse.status = "ok"; 
     authResponse.user = user; 

     Mockito.verify(api).login(Mockito.anyString(), Mockito.anyString(), Mockito.anyString(), argumentCaptor.capture()); 
     InstrumentationRegistry.getInstrumentation().runOnMainSync(new Runnable() { 
      @Override public void run() { 
       argumentCaptor.getValue().success(authResponse, null); 
      } 
     }); 

     assertThat(1, equalTo(monitor.getHits())); 
     InstrumentationRegistry.getInstrumentation().removeMonitor(monitor); 
    } 
1

simüle dizisindeki hattını aramaktan deneyin:

new Handler().postDelayed(new Runnable() { 
    @Override 
    public void run() { 
     btnFacebook.setEnabled(false); 
    } 
}, 100); 
+0

Cevabınız için teşekkür ederiz! İşe yarıyor ama çözüm değil. Test uygulamasının uygulamanın kodu üzerinde herhangi bir etkisi olmamalıdır. Kazanç plakası ağır bir çözüm olan İşleyicilerindeki animasyonları tetikleyen setEnabled ve benzer işlevlerin her çağırmasını sarmalıyım. – pawelo

+0

ama kodunuz gerçekten çalışıyor mu? Eğer öyleyse, kodunuzda etkisi olmayacak! Bir şekilde testlerde geçici çözümü uygulamanız gerekiyor! –

+1

Demek istediğim, uygulamamın İşleyici olmaksızın sorunsuz çalışması. Kaza yapan, Enstrümantasyon Testlerini yürütüyor. AndroidJUnit4 test koşucu benim konuları ile fırsatlar yoludur. Retrofit'in Callback'in kendisini geçmesi için Handler'ı kullandığını düşünüyorum, ancak bir şekilde test ortamında çalışmaz. – pawelo

İlgili konular