Règles JUnit4 avec AndroidX Test

AndroidX Test inclut un ensemble de règles JUnit à utiliser avec le AndroidJUnitRunner : Les règles JUnit offrent plus de flexibilité et réduisent le nombre code récurrent requis lors des tests. Par exemple, ils peuvent servir à démarrer activité spécifique.

ActivityScénarioRule

Cette règle permet de tester le fonctionnement d'une seule activité. La règle est lancée l'activité choisie avant chaque test annoté avec @Test, ainsi qu'avant toute méthode annotée avec @Before. La règle met fin à l'activité après le les tests terminés et toutes les méthodes annotées avec la fin @After. Pour accéder à l'objet dans votre logique de test, fournissez un rappel exécutable pour ActivityScenarioRule.getScenario().onActivity()

L'extrait de code suivant montre comment incorporer 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() { ... }
}

Règle de test de service

Cette règle offre un mécanisme simplifié pour lancer votre service avant que le des tests et de l'arrêter avant et après. Vous pouvez démarrer ou lier le service l'une des méthodes d'assistance. Il arrête ou se dissocie automatiquement après le test 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 le les ressources suivantes.

Documentation

Exemples

  • BasicSample: utilisation simple de ActivityScenarioRule.