AndroidX Test comprend un ensemble de règles JUnit à utiliser avec AndroidJUnitRunner. Les règles JUnit offrent plus de flexibilité et réduisent le code récurrent requis dans les tests. Par exemple, ils peuvent servir à démarrer une activité spécifique.
ActivityScenarioRule
Cette règle permet de tester le fonctionnement d'une seule activité. La règle lance l'activité choisie avant chaque test annoté avec @Test
, ainsi que avant toute méthode annotée avec @Before
. La règle met fin à l'activité une fois le test terminé et toutes les méthodes annotées avec @After
sont terminées. Pour accéder à l'activité donnée dans votre logique de test, fournissez un rappel exécutable à ActivityScenarioRule.getScenario().onActivity()
.
L'extrait de code suivant montre comment intégrer ActivityScenarioRule
dans votre logique de 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() { ... } }
ServiceTestRule
Cette règle fournit un mécanisme simplifié pour lancer votre service avant les tests et l'arrêter avant et après. Vous pouvez démarrer ou lier le service avec l'une des méthodes d'assistance. Elle s'arrête automatiquement ou se dissocie une fois le test terminé et toutes les méthodes annotées avec @After
sont terminées.
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(); } }
Ressources supplémentaires
Pour en savoir plus sur l'utilisation des règles JUnit dans les tests Android, consultez les ressources suivantes.
Documentation
- Le guide Tester vos fragments vous permet de les tester de manière isolée.
- Tester votre mise en page Compose, pour tester les interfaces utilisateur créées avec Compose.
Exemples
- BasicSample: utilisation simple de
ActivityScenarioRule
.