You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何为Kotlin中含when子句的calculateResult函数编写JUnit测试用例

Kotlin calculateResult 函数JUnit测试编写指南

测试思路

这个函数有三个明确的分支逻辑,我们需要覆盖所有分支同时重点测试边界值(整数区间的边界是最容易出现逻辑错误的位置):

  • 第一分支覆盖:score ≥257的场景,包含边界值257、大于257的常规值比如300
  • 第二分支覆盖:score在234~256区间的场景,包含左边界234、右边界256、区间内常规值比如240
  • 第三分支覆盖:score <234的场景,包含边界值233、小于234的常规值比如100、负数等异常输入场景

前置依赖配置(Gradle项目)

如果使用JUnit5进行测试,先在build.gradle.kts中添加相关依赖:

dependencies {
    // JUnit5 核心依赖
    testImplementation("org.junit.jupiter:junit-jupiter-api:5.9.2")
    testRuntimeOnly("org.junit.jupiter:junit-jupiter-engine:5.9.2")
    // Kotlin 测试官方扩展(可选,简化断言写法)
    testImplementation("org.jetbrains.kotlin:kotlin-test-junit5:1.8.20")
}

测试代码实现

提供两种常用写法,可根据项目习惯选择:

写法1:基础JUnit5测试用例

每个场景单独写测试方法,可读性高:

import org.junit.jupiter.api.Test
import kotlin.test.assertEquals

class CalculateResultTest {

    // 测试≥257返回Genius的分支
    @Test
    fun `score equals 257 returns Genius`() {
        assertEquals("Genius", calculateResult(257))
    }

    @Test
    fun `score greater than 257 returns Genius`() {
        assertEquals("Genius", calculateResult(300))
    }

    // 测试234~256返回Great的分支
    @Test
    fun `score equals 234 returns Great`() {
        assertEquals("Great", calculateResult(234))
    }

    @Test
    fun `score in 234 to 256 returns Great`() {
        assertEquals("Great", calculateResult(240))
    }

    @Test
    fun `score equals 256 returns Great`() {
        assertEquals("Great", calculateResult(256))
    }

    // 测试<234返回Good的分支
    @Test
    fun `score equals 233 returns Good`() {
        assertEquals("Good", calculateResult(233))
    }

    @Test
    fun `normal score less than 233 returns Good`() {
        assertEquals("Good", calculateResult(100))
    }

    @Test
    fun `negative score returns Good`() {
        assertEquals("Good", calculateResult(-10))
    }
}

写法2:参数化测试(更推荐)

适合多输入固定输出的场景,减少重复代码,后期加测试用例只需要新增一行参数即可:

import org.junit.jupiter.params.ParameterizedTest
import org.junit.jupiter.params.provider.CsvSource
import kotlin.test.assertEquals

class CalculateResultParameterizedTest {

    @ParameterizedTest
    @CsvSource(
        "257, Genius",
        "300, Genius",
        "234, Great",
        "240, Great",
        "256, Great",
        "233, Good",
        "100, Good",
        "-10, Good"
    )
    fun `calculateResult returns expected value for input score`(score: Int, expectedResult: String) {
        assertEquals(expectedResult, calculateResult(score))
    }
}

注意要点

  • 必须覆盖233、234、256、257四个边界值,避免区间判断逻辑写错
  • Kotlin支持用反引号包裹测试方法名,直接写自然语言描述测试逻辑,可读性更强

内容的提问来源于stack exchange,提问作者NRUSINGHA MOHARANA

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.01 13:06:04