Как Clean Architecture помогает в тестировании

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

Ответ

Clean Architecture разделяет приложение на слои (presentation, domain, data), что упрощает тестирование:

  • Изолированное тестирование слоёв: Domain-слой (бизнес-логика) тестируется юнит-тестами без зависимостей от фреймворков или БД.
  • Mocking зависимостей: Data-слой заменяется mock-реализациями в тестах презентации или domain.
  • Гибкость: Легко подменять реализации (например, FakeRepository для тестов).

Пример:

// Domain слой (легко тестировать)  
class GetUserUseCase(private val repo: UserRepository) {  
    suspend fun execute(id: String): User = repo.getUser(id)  
}  

// Тест с mock  
@Test  
fun `getUser returns error on failure`() = runTest {  
    val mockRepo = mock<UserRepository> {  
        on { getUser("1") } doThrow IOException()  
    }  
    val useCase = GetUserUseCase(mockRepo)  
    assertThrows<IOException> { useCase.execute("1") }  
}  

Чистая архитектура делает тесты быстрыми, стабильными и независимыми от внешних факторов.