Android中使用Koin整合Ktor-Client:缺失HttpClientEngine类型求助
Ktor客户端Koin模块单元测试失败原因及解决办法
问题重现
定义的Ktor客户端Koin模块代码:
fun provideKtorClient() = HttpClient(OkHttp) { install(ContentNegotiation) { json() } } val ktorModule = module { single { provideKtorClient() } }
编写单元测试验证模块:
@Test fun checkKtorModule() { ktorModule.verify() }
执行测试后抛出错误:
org.koin.test.verify.MissingKoinDefinitionException: Missing type 'io.ktor.client.engine.HttpClientEngine' for class 'io.ktor.client.HttpClient' in definition '[Singleton:'io.ktor.client.HttpClient']'
尝试手动提供HttpClientEngine时陷入依赖循环,原本以为Ktor的OkHttp引擎无需额外初始化,不清楚问题根源。
解决方案
纯单元测试场景
在纯单元测试中,需要通过extraTypes参数指定Ktor内部隐式依赖的类型,让Koin验证流程能识别这些依赖:
@Test fun checkKtorModule() { ktorModule.verify( extraTypes = listOf( io.ktor.client.engine.HttpClientEngine::class, io.ktor.client.HttpClientConfig::class ) ) }
Android仪器化测试场景
如果是Android仪器化测试,无需额外配置,直接通过koinApplication加载模块并验证即可:
@Test fun checkAllModules() { koinApplication{ modules(appModule, ktorModule) checkModules(){ withInstance<Ordering.Context>() withInstance<Application>() withInstance<SavedStateHandle>() } } }
内容的提问来源于stack exchange,提问作者Offbeat Upbeat
相关产品推荐
相关产品推荐

