Ответ
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") }
}
Чистая архитектура делает тесты быстрыми, стабильными и независимыми от внешних факторов.