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

如何用JUnit/Mockito测试Kotlin接口默认方法的未实现类行为?

用JUnit+Mockito测试Kotlin Animal接口扩展方法的全场景

要覆盖这个扩展方法的所有分支测试,分三个场景处理即可,其中默认分支可以通过Mockito mock接口实例来实现:

1. 测试Dog分支

直接实例化Dog类,调用sound()方法,断言返回结果符合预期:

import org.junit.Test
import org.junit.Assert.assertEquals

class AnimalSoundTest {
    @Test
    fun `dog should woof`() {
        val dog = Dog()
        assertEquals("woof", dog.sound())
    }
}

2. 测试Cat分支

和Dog的测试逻辑一致,实例化Cat类验证结果:

@Test
fun `cat should meow`() {
    val cat = Cat()
    assertEquals("meow", cat.sound())
}

3. 测试默认分支(非Dog/Cat的Animal实例)

因为没有其他Animal实现类,直接用Mockito创建一个Animal接口的mock对象即可,无需关心具体实现:

import org.mockito.Mockito.mock
import org.junit.Test
import org.junit.Assert.assertEquals

@Test
fun `unknown animal should return globglogabgalab`() {
    val unknownAnimal = mock(Animal::class.java)
    assertEquals("globglogabgalab", unknownAnimal.sound())
}

依赖说明

确保项目中引入了JUnit和Mockito的依赖,比如在Gradle Kotlin DSL中:

dependencies {
    testImplementation("junit:junit:4.13.2")
    testImplementation("org.mockito:mockito-core:4.11.0")
    // 若偏好Mockito的Kotlin适配语法,可额外添加
    testImplementation("org.mockito.kotlin:mockito-kotlin:4.1.0")
}

如果使用JUnit 5,只需替换注解为@org.junit.jupiter.api.Test,并对应调整JUnit依赖版本。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.10 19:51:02