讲师中心 微信公众号
AI工具推荐 视频效率加速

Gradle Kotlin项目怎么测试协程代码

小枫君_4291

小枫君_4291

发布时间:2026-10-25 10:07:39

|

949人浏览过

|

来源于php中文网

原创

应使用 runTest 而非 runBlockingTest(已弃用)或 runBlocking:前者自动虚拟时间、捕获异常、等待全部协程完成;后者不替换调度器、真实等待 delay、静默吞异常且无父子协程清理机制。

gradle kotlin项目怎么测试协程代码

直接用 runTest,别碰 runBlockingTest(已弃用)或裸写 runBlocking。 否则测试会漏异常、时间不虚拟、作用域不自动清理,甚至在 CI 上随机失败。

为什么不能用 runBlocking 测试协程

它只是阻塞当前线程等待协程结束,但:
• 不替换默认调度器,Dispatchers.Main 或 Dispatchers.IO 仍走真实线程池
• delay(1000) 会真等 1 秒,拖慢整个测试套件
• 未捕获的协程异常会被静默吞掉,测试通过但逻辑实际已崩
• 没有父子协程自动等待机制,子协程可能被提前裁剪

runTest 必须配的依赖和配置

确保 build.gradle.kts 中有:

dependencies {
    testImplementation("org.jetbrains.kotlinx:kotlinx-coroutines-test:1.8.0")
    testImplementation("org.junit.jupiter:junit-jupiter:5.10.2")
}

不需要手动设置 TestCoroutineDispatcher 或调用 Dispatchers.setMain() —— runTest 内部已自动完成这些。

常见错误写法及修正

以下写法看似能跑通,但埋了坑:

  • 错:用 GlobalScope.launch + join() —— 测试作用域外启动协程,join() 只等一个,其他子协程不受控
  • 错:在 @Test 函数里直接调 suspend 函数 —— 编译报错 “Suspend function should be called only from a coroutine”
  • 错:用 runBlocking { launch { ... } } —— 子协程没 await,测试函数返回时它还在后台跑
  • 对:统一用 runTest { ... },所有挂起调用、async、launch 都在它的作用域内,自动等待全部完成

示例:

@Test
fun networkCall_returnsResult() = runTest {
    val repo = TitleRepository(FakeNetwork("OK"), FakeDao())
    val result = repo.refreshTitle() // 直接调 suspend 函数
    assertEquals("OK", result)
}

延迟和时间控制必须用虚拟时钟

如果被测代码含 delay(3000) 或 withTimeout:
• runTest 默认启用虚拟时间,delay 不会真实休眠
• 用 advanceTimeBy(3000) 手动快进,验证中间状态
• 用 advanceUntilIdle() 等待所有挂起操作自然结束
• 别依赖 Thread.sleep 或真实计时器断言,那会破坏确定性

真正容易被忽略的是:即使你写了 runTest,如果测试函数签名用了 suspend(比如 @Test suspend fun ...),JUnit 会跳过它——JVM 测试运行器根本不认识协程。必须保持函数是普通 @Test fun,靠 = runTest { ... } 尾置调用来承载协程上下文。

热门AI工具

更多
DeepSeek

DeepSeek是一款面向对话、写作、编程和推理场景的AI大模型工具。

Atoms
Atoms Hot

Atoms是一款AI智能体工具,第一支自动构建真实业务的 AI 团队。

豆包大模型

豆包大模型是一款由字节跳动推出的企业级大语言模型服务平台。

SkildArt
SkildArt Hot

SkildArt是一款AI文本写作工具,一站式 AI 视觉创作平台。

讯飞智作

讯飞智作是一款AI视频创作工具,AI文本配音工具,数字人课程、营销视频制作。

二狗PPT
二狗PPT Hot

一款AI演示文稿工具,主要用于专为中式职场打造的AI PPT生成工具,适合需要提升相关任务效率的用户。

PixTV
PixTV Hot

PixTV是一款面向AIGC内容创作的AI视频生成工具。

AionClaw
AionClaw Hot

AionClaw是一款面向办公、创作和编程任务的AI桌面智能体。

WorkBuddy

一款AI办公效率工具,主要用于腾讯云推出的AI原生桌面智能体工作台,适合需要提升相关任务效率的用户。

相关专题

更多
Kotlin协程编程与Spring Boot集成实践
Kotlin协程编程与Spring Boot集成实践

本专题围绕 Kotlin 协程机制展开,深入讲解挂起函数、协程作用域、结构化并发与异常处理机制,并结合 Spring Boot 展示协程在后端开发中的实际应用。内容涵盖异步接口设计、数据库调用优化、线程资源管理以及性能调优策略,帮助开发者构建更加简洁高效的 Kotlin 后端服务架构。

371

2026.02.12

Java Kotlin协程与异步编程实战
Java Kotlin协程与异步编程实战

本专题围绕 Kotlin 协程与异步编程展开,讲解挂起函数、协程作用域、异步任务调度及并发控制方法。通过实际项目案例,帮助开发者提升后端服务性能,实现高效异步任务处理与稳定性保障。

179

2026.04.13

Kotlin Android开发教程大全
Kotlin Android开发教程大全

系统讲解 Google 官方推荐的 Android 开发首选语言 Kotlin 的核心知识与工程实践,涵盖 Kotlin 简洁语法(空安全/数据类/扩展函数/解构声明/作用域函数)与 Java 互操作、集合操作与函数式编程、协程(Coroutines)异步编程(suspend/launch/async/Flow)、Jetpack Compose 声明式 UI 开发(状态管理/组合函数/导航/动画)、MVVM / MVI 架构设计与 Vi

268

2026.06.03

软件测试常用工具
软件测试常用工具

软件测试常用工具有Selenium、JUnit、Appium、JMeter、LoadRunner、Postman、TestNG、LoadUI、SoapUI、Cucumber和Robot Framework等等。测试人员可以根据具体的测试需求和技术栈选择适合的工具,提高测试效率和准确性 。

4830

2023.10.13

java测试工具有哪些
java测试工具有哪些

java测试工具有JUnit、TestNG、Mockito、Selenium、Apache JMeter和Cucumber。php还给大家带来了java有关的教程,欢迎大家前来学习阅读,希望对大家能有所帮助。

3221

2023.10.23

Java 单元测试
Java 单元测试

本专题聚焦 Java 在软件测试与持续集成流程中的实战应用,系统讲解 JUnit 单元测试框架、Mock 数据、集成测试、代码覆盖率分析、Maven 测试配置、CI/CD 流水线搭建(Jenkins、GitHub Actions)等关键内容。通过实战案例(如企业级项目自动化测试、持续交付流程搭建),帮助学习者掌握 Java 项目质量保障与自动化交付的完整体系。

1146

2025.10.24

Java Maven/Gradle 构建与依赖管理合集
Java Maven/Gradle 构建与依赖管理合集

系统讲解 Java 项目构建工具的使用与进阶配置,涵盖 Maven 的 POM 文件结构、生命周期(clean/compile/package/install/deploy)与插件机制、依赖范围(compile/provided/test/runtime)与传递依赖管理、多模块聚合与继承、私有 Nexus 仓库发布,以及 Gradle 的 Groovy / Kotlin DSL 语法、Task 自定义与增量构建、依赖版本目录(Versi

369

2026.05.09

Gradle插件开发入门教程
Gradle插件开发入门教程

本专题介绍Gradle插件开发的基本流程,涵盖插件类编写、自定义任务注册、扩展参数设计和插件应用方法,帮助你理解插件如何组织构建逻辑,减少多个项目之间的重复配置。

80

2026.10.22

Gradle Wrapper配置教程
Gradle Wrapper配置教程

本专题介绍Gradle Wrapper的基本作用,涵盖文件组成、生成方法、版本配置和任务调用,帮助你理解项目如何使用指定的Gradle版本,减少不同开发环境带来的构建差异。

40

2026.10.22

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
Gradle 9 主版本升级指南
Gradle 9 主版本升级指南

共0课时 | 0人学习

Gradle 安全最佳实践
Gradle 安全最佳实践

共0课时 | 0人学习

Gradle 依赖校验手册
Gradle 依赖校验手册

共0课时 | 0人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn