21

próbuję przetestować działanie w module. Próbuję uruchomić tę aktywność w metodzie testowania, ale zawsze mam AssertionFailedError. Szukałem w Internecie tego problemu, ale nie mogłem znaleźć żadnego rozwiązania. Każda pomoc jest doceniana.Android - AssertionFailedError na metodzie startActivity w ActivityUnitTestCase klasy testowej

To moja klasa Test:

public class ContactActivityTest extends ActivityUnitTestCase<ContactActivity> { 

    public ContactActivityTest() { 
     super(ContactActivity.class); 
    } 


    @Override 
    public void setUp() throws Exception { 
     super.setUp(); 
    } 


    public void testWebViewHasNotSetBuiltInZoomControls() throws Exception { 
     Intent intent = new Intent(getInstrumentation().getTargetContext(), 
       ContactActivity.class); 
     startActivity(intent, null, null); 
    } 


    @Override 
    public void tearDown() throws Exception { 
     super.tearDown(); 
    } 
} 

I to jest błąd:

junit.framework.AssertionFailedError 
at android.test.ActivityUnitTestCase.startActivity(ActivityUnitTestCase.java:147) 
at com.modilisim.android.contact.ContactActivityTest.testWebViewHasNotSetBuiltInZoomControls(ContactActivityTest.java:29) 
at android.test.InstrumentationTestCase.runMethod(InstrumentationTestCase.java:214) 
at android.test.InstrumentationTestCase.runTest(InstrumentationTestCase.java:199) 
at android.test.AndroidTestRunner.runTest(AndroidTestRunner.java:191) 
at android.test.AndroidTestRunner.runTest(AndroidTestRunner.java:176) 
at android.test.InstrumentationTestRunner.onStart(InstrumentationTestRunner.java:555) 
at android.app.Instrumentation$InstrumentationThread.run(Instrumentation.java:1763) 

Pozdrawiam.

+1

Próbowałeś z pustym działalności lub może być tak, że 'Kod ContactActivity' jest odpowiedzialna za błąd? – Simas

+0

@Simas to może być, problemem jest która część kodu. Próbowałem z rozszerzeniem "FragmentActivity" i "Activity", a ja opróżniłem kod tego ostatniego i nadal się on kolidował z tym samym problemem. – Vince

+0

wierzę, trzeba mieć startActivity (...) kod w setup() Można to sprawdzić, a jeśli tak, to dodam odpowiedź, aby zaakceptować. –

Odpowiedz

12

ActivityUnitTestCase's StartActivity() Metoda musi być wywołana tylko w głównym wątku.

Można to zrobić w następujący sposób:

  1. Użyj @UiThreadTest adnotacji przed metody badania:

    @UiThreadTest 
    public void testWebViewHasNotSetBuiltInZoomControls() throws Exception { 
        Intent intent = new Intent(getInstrumentation().getTargetContext(), 
          ContactActivity.class); 
        startActivity(intent, null, null); 
    } 
    
  2. Użyj runOnMainSync metodę klasy Instrumentation :

    public void testWebViewHasNotSetBuiltInZoomControls() throws Exception { 
        final Intent intent = new Intent(getInstrumentation().getTargetContext(), 
          ContactActivity.class); 
    
        getInstrumentation().runOnMainSync(new Runnable() { 
         @Override 
         public void run() { 
          startActivity(intent, null, null); 
          } 
         }); 
    } 
    

Why am I right?

+0

Przykro mi, że nie mogłem zweryfikować odpowiedzi, by otrzymać pierwszą nagrodę. Ale adnotacja rozwiązała problem, więc tutaj jest naprawiony, zasłużyłeś na tę nagrodę. Dzięki! – Vince

+0

Ta odpowiedź rozwiązuje problem, byłoby świetnie, gdyby OP pytania zaakceptował to jako odpowiedź. – Prudhvi

+0

Zamiast tego możesz chcieć rozszerzyć 'ActivityInstrumentationTestCase2'. – jayeffkay

Powiązane problemy