AndroidX Test zawiera zestaw reguł JUnit, które należy stosować razem z AndroidJUnitRunner. Reguły JUnit są bardziej elastyczne i ograniczają wymagany w testach kod stały. Można na przykład użyć ich do uruchomienia konkretne działania.
Reguła scenariusza aktywności
Ta reguła obejmuje testy funkcjonalne pojedynczej aktywności. Reguła zostanie uruchomiona
wybraną aktywność przed każdym testem z adnotacjami @Test
oraz przed
dowolną metodą z adnotacją @Before
. Reguła zakończy aktywność po upływie
zakończeń testu i wszystkie metody opisane za pomocą adnotacji @After
. Aby uzyskać dostęp do
działania w logice testu, podaj wywołanie zwrotne dostępne dla
ActivityScenarioRule.getScenario().onActivity()
Fragment kodu poniżej pokazuje, jak stosować
ActivityScenarioRule
w procesie testowania:
@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.
}
}
public class MyClassTest {
@Rule
public ActivityScenarioRule<MyClass> activityRule =
new ActivityScenarioRule(MyClass.class);
@Test
public void myClassMethod_ReturnsTrue() { ... }
}
Reguła testu usługi
Ta reguła stanowi uproszczony mechanizm uruchamiania usługi, zanim
testuje ją i wyłącza przed i po. Możesz uruchomić usługę lub powiązać ją z
jedną z metod pomocniczych. Automatycznie zatrzymuje się lub rozłącza po zakończeniu testu
i wszystkie metody opisane przy użyciu adnotacji @After
zostały zakończone.
@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()
}
}
@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();
}
}
Dodatkowe materiały
Więcej informacji o używaniu reguł JUnit w testach na Androida znajdziesz w poniższe zasoby.
Dokumentacja
- Przetestuj fragmenty, aby dowiedzieć się, jak osobno testować fragmenty.
- Testowanie układu tworzenia wiadomości w celu przetestowania interfejsów utworzonych w Compose.
Próbki
- Podstawowy przykład: proste użycie funkcji
ActivityScenarioRule
.