21

Sto provando a verificare un'attività in un modulo. Sto solo provando ad avviare questa attività nel metodo di test, ma ho sempre un AssertionFailedError. Ho cercato sul Web questo problema ma non sono riuscito a trovare alcuna soluzione. Qualsiasi aiuto è apprezzato.Android - AssertionFailedError sul metodo startActivity nella classe di prova ActivityUnitTestCase

Questa è la mia classe di 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(); 
    } 
} 

E questo è l'errore:

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) 

saluti.

+1

Hai provato con un'attività vuoto o potrebbe essere che 'codice ContactActivity' è responsabile per l'errore? – Simas

+0

@Simas potrebbe essere, il problema è quale parte del codice. Ho provato con un'estensione di 'FragmentActivity' e' Activity', e ho svuotato il codice di quest'ultimo e si è ancora bloccato con lo stesso problema. – Vince

+0

Credo che sia necessario avere il codice startActivity (...) in setUp() Puoi controllare questo, e in tal caso aggiungerò una risposta da accettare. –

risposta

12

ActivityAnitTestCase startActivity() Il metodo deve essere chiamato solo sul thread principale.

questo può essere fatto nei seguenti modi:

  1. Utilizzare il @UiThreadTest annotazione prima del tuo metodo di prova:

    @UiThreadTest 
    public void testWebViewHasNotSetBuiltInZoomControls() throws Exception { 
        Intent intent = new Intent(getInstrumentation().getTargetContext(), 
          ContactActivity.class); 
        startActivity(intent, null, null); 
    } 
    
  2. Utilizzare il metodo della classe Strumentazione runOnMainSync :

    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

Mi dispiace di non aver potuto verificare la risposta per darti la mia taglia iniziale. Ma l'annotazione ha risolto il problema, quindi qui è stato riparato, tu meritavi questa grazia. Grazie! – Vince

+0

Questa risposta risolve il problema, sarebbe bello se l'OP di domanda lo accettasse come risposta. – Prudhvi

+0

Si consiglia di estendere 'ActivityInstrumentationTestCase2'. – jayeffkay

Problemi correlati