Robolectric config

В Robolectric, @Config — это аннотация, которая позволяет управлять параметрами среды тестирования. Она предоставляет множество настроек, которые можно использовать для настройки выполнения тестов, таких как указание версии Android, имитация определённых классов, настройка ресурсов и многое другое.

Основные параметры @Config

sdk

  • Описание: Определяет версию Android SDK, на которой будет выполнен тест. Можно указать одну или несколько версий.
  • Когда использовать: Когда нужно протестировать поведение вашего кода на определённых версиях Android или проверить совместимость с разными версиями API.
@Config(sdk = {21, 28})
public class MyTest {
    // Test code here
}

minSdk и maxSdk

  • Описание: Определяют диапазон версий SDK, в котором тесты должны быть выполнены.
  • Когда использовать: Если нужно протестировать код на всех версиях Android между двумя конкретными версиями SDK.
@Config(minSdk = 16, maxSdk = 30)
public class MyTest {
    // Test code here
}

manifest

  • Описание: Указывает путь к AndroidManifest.xml, который будет использоваться во время тестирования. По умолчанию Robolectric ищет AndroidManifest.xml в каталоге модуля.
  • Когда использовать: Если проект имеет нестандартное расположение манифеста или для указания альтернативного манифеста для тестов.
@Config(manifest = "src/test/AndroidManifest.xml")
public class MyTest {
    // Test code here
}

resourceDir

  • Описание: Указывает путь к папке ресурсов, которая будет использована Robolectric.
  • Когда использовать: Если ресурсы проекта находятся в нестандартном месте или нужно использовать другой набор ресурсов для тестов.

shadows

  • Описание: Указывает классы шедоуз (shadows), которые будут использоваться в тестах. Shadows — это классы, которые имитируют поведение Android API.
  • Когда использовать: Когда нужно изменить поведение стандартных классов Android для тестов.

application

  • Описание: Указывает класс Application, который будет использоваться во время выполнения тестов. Это позволяет заменять класс Application на время тестирования.
  • Когда использовать: Если нужно протестировать поведение приложения с кастомной реализацией Application.

packageName

  • Описание: Указывает имя пакета, которое будет использовано в тестах. Иногда полезно для имитации других пакетов.
  • Когда использовать: Когда нужно протестировать поведение кода в контексте другого пакета.

instrumentedPackages

  • Описание: Указывает список пакетов, для которых Robolectric будет использовать реальную инстансацию классов, а не имитацию.
  • Когда использовать: Когда нужно протестировать классы из определённых пакетов как реальные объекты, а не их эмулированные версии.

Когда использовать @Config

Аннотация @Config особенно полезна в следующих случаях:

  • Тестирование на разных версиях SDK: Когда ваше приложение должно поддерживать несколько версий Android, вы можете протестировать его поведение на каждой из этих версий.

  • Изменение поведения Android API: Использование шедоуз позволяет имитировать или переопределять поведение стандартных классов Android, что особенно полезно для тестирования кода, который зависит от API, недоступных в обычных JVM-тестах.

  • Тестирование с разными конфигурациями ресурсов: Если ваше приложение должно корректно работать с разными конфигурациями, такими как язык, плотность экрана или ориентация, @Config позволяет вам тестировать эти сценарии.

  • Поддержка кастомных реализаций Application или Manifest: Иногда необходимо протестировать приложение с различными конфигурациями манифеста или даже с заменой класса Application.