Règles JUnit4 avec AndroidX Test

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

Exemples

  • BasicSample: utilisation simple de ActivityScenarioRule.