Mockk允许模拟静态函数,但是如何模拟Kotlin顶级函数?
例如,如果我调用了Kotlin文件HelloWorld.kt,我该如何模拟该sayHello()函数?
HelloWorld.kt
fun sayHello() = "Hello Kotlin!"
Run Code Online (Sandbox Code Playgroud)
小智 13
有一种方法可以模拟顶级函数:
mockkStatic("pkg.FileKt")
every { fun() } returns 5
Run Code Online (Sandbox Code Playgroud)
您只需要知道此功能转到哪个文件即可。检入JAR或堆栈跟踪。
gma*_*zzo 12
以下语法对我有用。
mockkStatic(::sayHello.javaMethod!!.declaringClass.kotlin)
Run Code Online (Sandbox Code Playgroud)
我很惊讶目前jvm-stdlib还没有关于此的任何内容。
编辑: 此重载现已正式引入:https : //github.com/mockk/mockk/pull/518
mockkStatic(::sayHello)
Run Code Online (Sandbox Code Playgroud)
小智 6
要添加以前的答案,这是有效的:
mockkStatic("pkg.FileKt")
every { fun() } returns 5
Run Code Online (Sandbox Code Playgroud)
其中mockStatic将“package_name:class_file_name”作为参数,但为了简化mockStatick调用,您可以直接在文件中使用@file:JvmName为编译器指定文件名。
HelloWorld.kt
@file:JvmName("hello")
fun sayHello() = "Hello Kotlin!"
Run Code Online (Sandbox Code Playgroud)
HelloWorldTest.kt
mockkStatic("pkg.hello")
every { fun() } returns 5
Run Code Online (Sandbox Code Playgroud)
关于为什么这是必要的以及其他示例的更详细说明:https://blog.kotlin-academy.com/mocking-is-not-rocket-science-mockk-advanced-features-42277e5983b5
| 归档时间: |
|
| 查看次数: |
1516 次 |
| 最近记录: |