AndroidX Test включает набор правил JUnit, которые используются с AndroidJUnitRunner. Правила JUnit обеспечивают большую гибкость и сокращают шаблонный код, необходимый для тестов. Например, с их помощью можно запустить определенное действие.
ActivityScenarioRule
Это правило обеспечивает функциональное тестирование одного действия. Правило запускает выбранное действие перед каждым тестом, помеченным аннотацией @Test, а также перед любым методом, помеченным аннотацией @Before. Правило завершает действие после окончания теста и выполнения всех методов, помеченных аннотацией @After. Чтобы получить доступ к действию в логике тестирования, предоставьте обратный вызов для ActivityScenarioRule.getScenario().onActivity().
В следующем фрагменте кода показано, как включить ActivityScenarioRule в логику тестирования:
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() { ... } }
ServiceTestRule
Это правило предоставляет упрощенный механизм запуска вашего сервиса перед тестами и его завершения до и после. Вы можете запустить или привязать сервис с помощью одного из вспомогательных методов. Она автоматически останавливается или отвязывается после завершения теста и всех методов, аннотированных с помощью @After.
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(); } }
Дополнительные ресурсы
Дополнительную информацию об использовании правил JUnit в тестах Android можно найти в следующих ресурсах.
Документация
- Тестирование фрагментов – руководство по тестированию фрагментов по отдельности.
- Тестирование макета Compose – тестирование интерфейсов, созданных с помощью Compose.
Образцы
- BasicSample – простой пример использования
ActivityScenarioRule.