AndroidX Test zawiera zestaw reguł JUnit do użycia z AndroidJUnitRunner. Reguły JUnit zapewniają większą elastyczność i zmniejszają ilość powtarzalnego kodu wymaganego w testach. W ten sposób można na przykład rozpocząć określone działanie.
RegułaScenariuszu aktywności
Ta reguła służy do testowania funkcjonalnego pojedynczego działania. Reguła uruchamia wybraną aktywność przed każdym testem z adnotacją @Test
, a także przed dowolną metodą z adnotacją @Before
. Reguła kończy działanie po zakończeniu testu i zakończeniu wszystkich metod z adnotacjami @After
. Aby uzyskać dostęp do danego działania w logice testu, udostępnij wywołanie zwrotne wykonywalne do ActivityScenarioRule.getScenario().onActivity()
.
Ten fragment kodu pokazuje, jak włączyć ActivityScenarioRule
w logikę testowania:
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() { ... } }
Reguła testowa usługi
Ta reguła zapewnia uproszczony mechanizm uruchamiania usługi przed testami i wyłączania przed rozpoczęciem i po zakończeniu testów. Możesz uruchomić lub powiązać usługę
za pomocą jednej z metod pomocniczych. Po zakończeniu testu i zakończeniu wszystkich metod z adnotacjami @After
następuje automatyczne zatrzymanie lub usunięcie powiązania.
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(); } }
Dodatkowe materiały
Więcej informacji o używaniu reguł JUnit w testach na Androidzie znajdziesz w tych materiałach.
Dokumentacja
- Przewodnik Testowanie fragmentów służy do testowania fragmentów osobno.
- Testowanie układu tworzenia wiadomości, by przetestować interfejsy użytkownika utworzone za pomocą funkcji tworzenia wiadomości.
Próbki
- BasicSample: proste użycie
ActivityScenarioRule
.