Il test AndroidX include un insieme di regole JUnit da utilizzare con AndroidJUnitRunner Le regole JUnit offrono maggiore flessibilità e riducono il codice boilerplate richiesto nei test. Ad esempio, possono essere usate per avviare per un'attività specifica.
Regola dello scenario di attività
Questa regola fornisce i test funzionali di una singola attività. La regola viene avviata
l'attività scelta prima di ogni test annotata con @Test, nonché prima
qualsiasi metodo annotato con @Before. La regola termina l'attività dopo
test completati e tutti i metodi annotati con @After di completamento. Per accedere ai dati forniti
attività nella logica di test, fornisci un callback eseguibile
ActivityScenarioRule.getScenario().onActivity().
Il seguente snippet di codice mostra come incorporare
ActivityScenarioRule nella logica di test:
Kotlin
@RunWith(AndroidJUnit4::class.java) @LargeTest class MyClassTest { @get:Rule val activityRule = ActivityScenarioRule(MyClass::class.java) @Test fun myClassMethod_ReturnsTrue() { activityRule.scenario.onActivity { … } // Optionally, access the activity. } }
Java
public class MyClassTest { @Rule public ActivityScenarioRule<MyClass> activityRule = new ActivityScenarioRule(MyClass.class); @Test public void myClassMethod_ReturnsTrue() { ... } }
RegolaServiceTest
Questa regola fornisce un meccanismo semplificato per avviare il servizio prima che
i test e arrestarlo prima e dopo. Puoi avviare o associare il servizio con
uno dei metodi helper. Si interrompe o si slega automaticamente dopo il test
vengono completati e tutti i metodi annotati con @After sono terminati.
Kotlin
@RunWith(AndroidJUnit4::class.java) @MediumTest class MyServiceTest { @get:Rule val serviceRule = ServiceTestRule() @Test fun testWithStartedService() { serviceRule.startService( Intent(ApplicationProvider.getApplicationContext<Context>(), MyService::class.java)) // Add your test code here. } @Test fun testWithBoundService() { val binder = serviceRule.bindService( Intent(ApplicationProvider.getApplicationContext(), MyService::class.java)) val service = (binder as MyService.LocalBinder).service assertThat(service.doSomethingToReturnTrue()).isTrue() } }
Java
@RunWith(AndroidJUnit4.class) @MediumTest public class MyServiceTest { @Rule public final ServiceTestRule serviceRule = new ServiceTestRule(); @Test public void testWithStartedService() { serviceRule.startService( new Intent(ApplicationProvider.getApplicationContext(), MyService.class)); // Add your test code here. } @Test public void testWithBoundService() { IBinder binder = serviceRule.bindService( new Intent(ApplicationProvider.getApplicationContext(), MyService.class)); MyService service = ((MyService.LocalBinder) binder).getService(); assertThat(service.doSomethingToReturnTrue()).isTrue(); } }
Risorse aggiuntive
Per ulteriori informazioni sull'utilizzo delle regole JUnit nei test Android, consulta le seguenti risorse.
Documentazione
- Guida Testa i frammenti per testare i frammenti in modo isolato.
- Testare il layout di Compose per testare le UI create con Compose.
Campioni
- BasicSample: utilizzo semplice di
ActivityScenarioRule.