Правила JUnit4 с AndroidX Test

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 можно найти в следующих ресурсах.

Документация

Образцы

  • BasicSample – простой пример использования ActivityScenarioRule.