Kotlin mock库如何模拟非接口类?

Kotlin mock库如何模拟非接口类?,kotlin,mocking,mockk,Kotlin,Mocking,Mockk,当我构建一个类似于下面的结构时,我发现没有通过接口执行的类也可以是可模拟的。 这是怎么回事?它可能与Kotlin有关吗 其实我这里的问题是,;如果没有重写,它如何粉碎类的函数?我很好奇这件事的背景 class Sample { fun returnFive() = 5 } @Test fun test(){ var sample = Sample() sample = mockk { every { returnFive() } returns 10

当我构建一个类似于下面的结构时,我发现没有通过
接口执行的类也可以是可模拟的。
这是怎么回事?它可能与Kotlin有关吗


其实我这里的问题是,;如果没有
重写
,它如何粉碎类的函数?我很好奇这件事的背景

class Sample {
    fun returnFive() = 5
}

@Test
fun test(){
    var sample = Sample()
    sample = mockk {
        every { returnFive() } returns 10
    }
    assertEquals(5,sample.returnFive())
}

您的代码可以重写为

类示例{
fun returnFive()=5
}
@试验
趣味测试(){
val样本:样本=mockk()
每个{sample.returnFive()}返回10
assertEquals(10,sample.returnFive())
}
这允许我们看到
sample
成为
sample
的一个实例,但是
mock
正在创建它,而不是您

当您将此创建委托给
Mockk
时,它会用一个插入指令的实例替换该实例,从而可以定义额外的行为。Mockk的作者在《如果你感兴趣的话》中对此做了更多的解释


这可能与科特林有关吗

这完全不是科特林的行为


例如,将Java与Mockito一起使用时,您也可以做同样的事情。

事实上,我的问题是;它如何在没有“重写”的情况下破坏类的功能?我很好奇它的背景。它使用字节码操作。我相信一切都是通过ByteBuddy完成的,但是在一个非常高的层次上:1“子类化”你的类。2-将类中的所有方法委托给mockk的类3-让程序像执行类一样执行它们