Какие классы покрываешь Unit-тестами

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

Ответ

Unit-тестами покрываю классы без зависимостей от Android-фреймворка (Context, Activity и т.д.). В основном это:

  • Domain-слой: UseCases, бизнес-логика
  • Data-слой: Repository, Mappers, DataSources (кроме работы с БД/сетью)
  • Utility-классы: Validators, Converters, Extensions

Пример теста для UseCase:

class GetUserUseCaseTest {
    private val repo = mockk<UserRepository>()
    private val useCase = GetUserUseCase(repo)

    @Test
    fun `invoke should return user from repo`() = runTest {
        val expectedUser = User("test")
        coEvery { repo.getUser() } returns expectedUser

        val result = useCase()

        assertEquals(expectedUser, result)
        coVerify { repo.getUser() }
    }
}

Для ViewModel и других классов с Android-зависимостями использую Instrumented-тесты.