使用 JUnit5 编写测试
组织测试结构
使用 JUnit5 编写测试 是 CoddyKit 上的免费 Kotlin Academy 课时。 这是第 1 节课,共 4 节。 你可以在下方免费阅读本课时的完整内容 — 然后在浏览器中使用内置代码编辑器和全天候 AI 导师进行实践。 这是 Kotlin Academy 学习路径的一部分,你的进度在网页和 CoddyKit 应用中同步。 Kotlin Academy 课程共包含 4 节课。
什么是 JUnit5?
JUnit5(JUnit Jupiter)是 JVM 和 Kotlin 的标准测试框架。它提供了用于标记和组织测试代码的注解。
- 测试位于
src/test/kotlin - 每项测试都是一个函数
- 测试运行器会执行这些测试并报告结果
添加依赖项
将 JUnit Jupiter 添加到测试配置中,并启用 JUnit 平台。
dependencies {
testImplementation("org.junit.jupiter:junit-jupiter:5.10.2")
}
tasks.test {
useJUnitPlatform()
}您的第一项测试
使用 @Test 标记函数。测试会对代码的某个行为做出断言。
import org.junit.jupiter.api.Test
import org.junit.jupiter.api.Assertions.assertEquals
class MathTest {
@Test
fun addsTwoNumbers() {
assertEquals(4, 2 + 2)
}
}描述性测试名称
使用 @DisplayName 生成易读的测试报告,而不必使用很长的函数名称。
import org.junit.jupiter.api.Test
import org.junit.jupiter.api.DisplayName
class OrderTest {
@Test
@DisplayName("total includes tax")
fun totalWithTax() {
// ...
}
}使用 @BeforeEach 设置
@BeforeEach 会在每项测试之前运行,非常适合准备全新的测试资源。@AfterEach 会在每项测试之后运行,用于清理。
import org.junit.jupiter.api.BeforeEach
class CartTest {
private lateinit var cart: MutableList<String>
@BeforeEach
fun setUp() {
cart = mutableListOf()
}
}类级别设置
@BeforeAll 和 @AfterAll 会为整个类各运行一次。在 Kotlin 中,它们需要与带有 @JvmStatic 的伴生对象一起使用(或者使用每个类一个实例的生命周期)。
import org.junit.jupiter.api.BeforeAll
class DbTest {
companion object {
@BeforeAll
@JvmStatic
fun connect() {
// open shared connection
}
}
}准备—执行—断言
将每项测试组织为三个清晰的阶段:
- 准备 — 设置输入和状态
- 执行 — 调用正在测试的代码
- 断言 — 验证结果
这样可以让测试易于阅读,并且重点明确。
嵌套测试
@Nested 会将相关测试分组,生成树状报告,从而记录代码的行为。
import org.junit.jupiter.api.Nested
import org.junit.jupiter.api.Test
class StackTest {
@Nested
inner class WhenEmpty {
@Test fun isEmpty() { /* ... */ }
}
}参数化测试
使用 @ParameterizedTest 和值源,针对多个输入运行同一项测试。
import org.junit.jupiter.params.ParameterizedTest
import org.junit.jupiter.params.provider.ValueSource
import org.junit.jupiter.api.Assertions.assertTrue
class NumberTest {
@ParameterizedTest
@ValueSource(ints = [2, 4, 6])
fun isEven(n: Int) {
assertTrue(n % 2 == 0)
}
}禁用与标记
使用 @Disabled 临时跳过测试,并使用 @Tag 对测试进行分组,以便在持续集成运行中包含或排除这些测试。
import org.junit.jupiter.api.Disabled
import org.junit.jupiter.api.Tag
import org.junit.jupiter.api.Test
class FlakyTest {
@Test
@Disabled("fix later")
@Tag("slow")
fun pending() { }
}独立完整的示例
下面是一个简单的纯 Kotlin 函数,以及测试它的基本思路(测试本身在 JUnit 下运行)。
fun add(a: Int, b: Int): Int = a + b
fun main() {
val result = add(2, 3)
println(if (result == 5) "PASS" else "FAIL")
}快速检查
您需要在每个测试方法之前准备一个全新的空列表。应该使用哪个注解?
回顾
您可以这样组织 JUnit5 测试:
@Test标记测试,@DisplayName为测试命名@BeforeEach/@BeforeAll负责设置- 准备—执行—断言让测试保持清晰
@Nested和@ParameterizedTest用于组织和扩展测试
下一节:断言。
用 AI 导师学习 Kotlin — 免费
在浏览器中编写并运行真实代码,获得全天候 AI 导师的即时帮助,并在网页或应用中继续学习。
- 课程
- 51
- 课程
- 203
常见问题解答
「使用 JUnit5 编写测试」课时是免费的吗?
是的 — 「使用 JUnit5 编写测试」的完整文本可在网页上免费阅读。要进行交互式练习(内置代码编辑器和全天候 AI 导师)并解锁 Kotlin Academy 课程的其余内容,请升级到 CoddyKit PRO。 Kotlin Academy 课程共包含 4 节课。
「使用 JUnit5 编写测试」这节课中我会学到什么?
组织测试结构 你通过在浏览器中直接运行的动手代码来练习 Kotlin Academy,全天候 AI 导师会在你学习这节课的过程中回答你的问题。
学习 Kotlin Academy 需要有经验吗?
无需任何先前经验。CoddyKit 上的 Kotlin Academy 课程适合初学者到高级学习者,你可以从这里开始或从头开始,按照自己的节奏学习。 这是第 1 节课,共 4 节。
「使用 JUnit5 编写测试」课时需要多长时间?
大多数 CoddyKit 课程大约需要 5–10 分钟。每节课都很精短且互动,所以你能稳步进步,并在网页和应用中从离开的地方继续。
我能在这节 Kotlin Academy 课中编写并运行代码吗?
能。每节 Kotlin Academy 课都包含内置代码编辑器,你可以在浏览器中直接编写并运行真实代码,并获得即时 AI 反馈 — 无需本地设置。
此课程中的所有课时
- 使用 JUnit5 编写测试
- 断言
- 使用 MockK 进行模拟
- 协程测试