Правила JUnit4 с помощью AndroidX Test

AndroidX Test включает набор правил JUnit , которые будут использоваться с AndroidJUnitRunner . Правила JUnit обеспечивают большую гибкость и сокращают количество шаблонного кода, необходимого для тестов. Например, их можно использовать для начала определенного действия.

Правило сценария активности

Это правило обеспечивает функциональное тестирование одного действия. Правило запускает выбранное действие перед каждым тестом, помеченным @Test , а также перед любым методом, помеченным @Before . Правило прекращает действие после завершения теста и завершения всех методов, помеченных @After . Чтобы получить доступ к данному действию в вашей тестовой логике, предоставьте обратный вызов для ActivityScenarioRule.getScenario().onActivity() .

Следующий фрагмент кода демонстрирует, как включить ActivityScenarioRule в вашу логику тестирования:

Котлин

@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() { ... }
}

СервисТестПравило

Это правило предоставляет упрощенный механизм запуска службы перед тестами и ее закрытия до и после. Вы можете запустить или привязать службу с помощью одного из вспомогательных методов. Он автоматически останавливается или отвязывается после завершения теста и завершения всех методов, помеченных @After .

Котлин

@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();
    }
}

Дополнительные ресурсы

Для получения дополнительной информации об использовании правил JUnit в тестах Android обратитесь к следующим ресурсам.

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

Образцы

  • BasicSample : простое использование ActivityScenarioRule .