Regole JUnit4 con AndroidX Test

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'uso delle regole JUnit nei test Android, consulta le seguenti risorse.

Documentazione

Campioni

  • BasicSample: utilizzo semplice di ActivityScenarioRule.