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

