Как Context влияет на тестируемость класса

«Как Context влияет на тестируемость класса» — вопрос из категории Тестирование, который задают на 23% собеседований Android Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Контекст усложняет тестирование, так как создает зависимости от Android-окружения. Классы, использующие Context, сложнее тестировать юнит-тестами без эмуляции.

Лучшие практики:

  1. Выносить логику в отдельные классы без Context
  2. Использовать dependency injection для подмены Context в тестах

Пример плохого кода:

class BadExample(private val context: Context) {
    fun showToast() {
        Toast.makeText(context, "Hi!", Toast.LENGTH_SHORT).show()
    }
}

Лучший вариант:

class GoodExample(private val notifier: Notifier) {
    fun showNotification() {
        notifier.show("Hi!")
    }
}

// В продакшене:
GoodExample(AndroidNotifier(context))
// В тестах:
GoodExample(MockNotifier())