AndroidX Test enthält eine Reihe von JUnit-Regeln, die mit dem AndroidJUnitRunner verwendet werden. JUnit-Regeln bieten mehr Flexibilität und reduzieren den bei Tests erforderlichen Boilerplate-Code. Sie können beispielsweise verwendet werden, um eine bestimmte Aktivität zu starten.
Aktivitätsszenarioregel
Diese Regel ermöglicht Funktionstests für eine einzelne Aktivität. Die Regel startet die ausgewählte Aktivität vor jedem mit @Test
annotierten Test sowie vor jeder mit @Before
annotierten Methode. Die Regel beendet die Aktivität, nachdem der Test abgeschlossen ist und alle mit @After
gekennzeichneten Methoden abgeschlossen sind. Damit du auf die jeweilige Aktivität in deiner Testlogik zugreifen kannst, musst du einen Callback bereitstellen, der für ActivityScenarioRule.getScenario().onActivity()
ausgeführt werden kann.
Das folgende Code-Snippet zeigt, wie Sie ActivityScenarioRule
in Ihre Testlogik einbinden:
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() { ... } }
Diensttestregel
Diese Regel bietet einen vereinfachten Mechanismus, mit dem Sie Ihren Dienst vor den Tests starten und davor und danach herunterfahren können. Sie können den Dienst mit einer der Hilfsmethoden starten oder binden. Der Vorgang wird automatisch beendet oder die Bindung wird aufgehoben, nachdem der Test abgeschlossen und alle mit @After
annotierten Methoden abgeschlossen sind.
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(); } }
Weitere Informationen
Weitere Informationen zur Verwendung von JUnit-Regeln in Android-Tests finden Sie in den folgenden Ressourcen.
Dokumentation
- Testen Sie Ihre Fragmente, um sie isoliert zu testen.
- Testen Sie Ihr Layout von „Compose“, um mit der Funktion „Compose“ erstellte UIs zu testen.
Produktproben
- BasicBeispiel: Einfache Verwendung von
ActivityScenarioRule
.