如何为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
相关产品推荐
相关产品推荐

