Ktor WebSocket协程客户端测试异常:Turbine校验未执行
解决提示
- 给自动重连加可控开关或延迟:在Client类里新增
autoReconnect参数,测试时设为false;或者抽离重连逻辑为可注入的依赖,测试时替换成空实现,避免无限重连循环抢占协程资源。 - 测试中主动打断重连:客户端如果用
CoroutineScope管理协程,在Turbine检测到预期的Disconnected状态后,立即调用scope.cancel()终止客户端的所有协程,阻止后续重连动作。 - 精准控制状态校验时机:用Turbine的
awaitItem()逐个拦截状态,比如:client.state.test { awaitItem() shouldBe Disconnected awaitItem() shouldBe Connected // 触发服务器关闭连接 awaitItem() shouldBe Disconnected // 立刻取消客户端协程,终止重连 client.coroutineScope.cancel() } - Mock WebSocket行为:测试时不用真实Ktor客户端,用MockK等工具模拟WebSocketSession,让它只触发一次关闭事件,不触发后续重连逻辑,专注于状态流转的校验。
- 对齐协程调度器:确保测试协程和客户端协程使用相同的调度器(比如
Dispatchers.Unconfined),避免因调度优先级问题导致测试块无法及时执行。
内容的提问来源于stack exchange,提问作者colymore
相关产品推荐
相关产品推荐

