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

Kotlin中如何正确测试方法的返回值类型?

错误原因

你当前的断言逻辑是将方法返回的实际List实例和List::class(Kotlin类元数据对象)做相等判断,二者完全是不同类型的对象,所以必然会触发断言失败。

正确实现方案

方案1:使用Hamcrest instanceOf 匹配器(适配你当前用的assertThat语法)

直接用专门校验类型的匹配器判断返回值是否属于List类型即可:

import org.hamcrest.CoreMatchers.instanceOf
import org.hamcrest.MatcherAssert.assertThat
import org.junit.Test

@Test
fun factorsOfShouldReturnAList(){
    val result = prime.factorsOf(1)
    assertThat(result, instanceOf(List::class.java))
}

方案2:使用Kotlin原生is关键字断言

不需要引入额外匹配器,用Kotlin自带的类型判断语法也可以实现:

import org.junit.Test

@Test
fun factorsOfShouldReturnAList(){
    val result = prime.factorsOf(1)
    assert(result is List<*>)
}
扩展:覆盖所有合法入参的类型校验

如果要验证任意合法入参都返回List类型,可以配合参数化测试实现:

import org.junit.jupiter.params.ParameterizedTest
import org.junit.jupiter.params.provider.ValueSource
import org.hamcrest.CoreMatchers.instanceOf
import org.hamcrest.MatcherAssert.assertThat

@ParameterizedTest
@ValueSource(ints = [1, 2, 12, 30, 100]) // 填入你需要覆盖的合法入参
fun factorsOfForAnyValidInputAlwaysReturnList(input: Int) {
    val result = prime.factorsOf(input)
    assertThat(result, instanceOf(List::class.java))
}

注意:受JVM泛型擦除限制,运行时无法直接校验List的泛型参数类型,如果需要校验元素类型,需要额外对返回值内的元素单独做类型判断。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 12:15:01