0

我有一个 Kotlin 项目,使用kotest作为我的单元测试框架和mockk来处理我的模拟需求。我对 Kotlin 语言的各个方面都很陌生,并且选择了测试库/框架。

我有一个简单的类,其中一个函数创建一个我想监视的对象。

import java.net.URI

class MyClass {
    public fun doStuff() {
        val uri = URI("https://some-random-endpoint.com/get/some/stuff")
        // ...
        // ...use URI object to get some stuff
        // ...
    }
}

我想监视 URI 对象的创建,以确保它通过了正确的端点。根据文档,我最初认为我可以像这样实现我的目标:

import io.kotest.core.spec.style.FunSpec
import io.kotest.matchers.shouldBe
import io.mockk.spyk
import java.net.URI

class MyClassTest : FunSpec({
    test("doStuff should be targeting the correct endpoint") {
        val urlSpy = spyk<URI>()
        val myClass: MyClass = MyClass()
        myClass.doStuff()
        urlSpy.host shouldBe "some-random-endpoint.com"
        urlSpy.path shouldBe "/get/some/stuff"
    }
})

但是,这会失败,因为两者urlSpy.hosturlSpy.pathare null

我显然误解了一些东西。我怀疑我希望的幕后魔术不是将我的间谍与在MyClass.doStuff()

如果我用 a 替换我的间谍,mockk那么 URI 对象的创建将被模拟,正如我所期望的那样。但是,在这种情况下,模拟对我来说似乎不是正确的对象......我不想模拟行为,我只想验证编码的行为。

我哪里错了?

4

0 回答 0