如何解决Kotlin:如何验证在模拟上调用了扩展函数
假设我有一个 Java 类 Metrics。我在 Kotlin 中定义了一些关于 Metrics 的扩展函数
fun Merics.expose(name: String,value: Number) {
// do something
}
请注意,Java 类 Metrics
也有一个名为 expose
的方法,但具有不同的签名。
我创建了一个测试,在其中模拟了 metrics
对象并调用了应调用扩展函数 expose
的代码路径。但是如何验证这些扩展函数是否被调用?
我尝试使用 mockk 和 mockito-kotlin,他们似乎都不知道 metrics
对象有一个名为 expose
的新函数,具有不同的签名。
解决方法
您无法验证是否在模拟上调用了扩展函数,因为它不是该类的一部分。扩展函数只是一个带有接收器的顶级函数(在您的例子中是 Metrics
的实例)。
但是您仍然可以验证您的代码中是否调用了扩展函数
您可以使用 mockkStatic 执行此操作。
您正在传递(生成的)扩展函数的路径。假设您在包 Metrics
中创建了 org.com
扩展函数。扩展类应该在:com.org.MericsExtensionKt
.
想要验证对扩展函数的调用的测试可能如下所示:
@Test
fun check_metrics_expose_extension_was_called() {
mockkStatic("com.org.MericsExtensionKt")
// call your function that is calling Metrics.expose()
// classUnderTest.someFunction()
// this verifies a call to the extension function and their parameters
verify { any<Metrics>().expose(name = any(),value = any()) }
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。