Kotlin Academy · 课时

使用 JUnit5 编写测试

组织测试结构

第 1 / 4 课13 个步骤

使用 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 反馈 — 无需本地设置。

此课程中的所有课时

  1. 使用 JUnit5 编写测试
  2. 断言
  3. 使用 MockK 进行模拟
  4. 协程测试
← 返回 Kotlin Academy