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

