В Dagger вы создадите класс Mock или Test, который будет @Inject
вместо ActivityApiService
. Здесь то же самое.
Вместо:
class ActivityApiService(val ctx: Context) {
fun createId(): String = doOtherThing(ctx)
}
Вы делаете
interface ActivityApiService {
fun createId(): String
}
, и теперь у вас есть 2 реализации, одна для продукта
class ActivityApiServiceImpl(val ctx: Context): ActivityApiService {
override fun createId(): Unit = doOtherThing(ctx)
}
и еще один для тестирования
fun testBla() {
val api = object: ActivityApiService {
override fun createId(): String = "4321"
}
val deps = FetcherDependencies(Either.monadError(), api)
deps.createId("1234") shouldBe "4321"
}
или даже используйте Mockito или аналогичный инструмент для создания ActivityApiService
.
У меня есть пара статей о том, как отделить и унитазировать вне рамок Android, которые не связаны со стрелками. Установите флажок «Безголовая разработка в полностью реактивных приложениях» и связанный с ним проект https://github.com/pakoito/FunctionalAndroidReference.
Если ваш график зависимостей слишком запутан и вам нужна некоторая компиляция, время волочится c, чтобы создать эти зависимости, вы всегда можете создать локальный класс в тестах и @Inject
конструктор там Смысл в том, чтобы отделить вещи, которые не являются нестабильными, например, от всей структуры Android: D