首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >mockk,当将mockk用于存根静态函数时会出现错误。

mockk,当将mockk用于存根静态函数时会出现错误。
EN

Stack Overflow用户
提问于 2022-04-07 15:57:47
回答 1查看 417关注 0票数 0

使用io.mockk 1.11.0

具有@JvmStatic函数的类

代码语言:javascript
复制
class LogUtil {
    @JvmStatic
    fun logData(jsonStr: String) {
        val jsonObj = getDataJson(jsonStr)
        if (jsonObj == null) {
            Log.e("+++", "+++ wrong json")
        }
        // ......
    }
}

数据利用

代码语言:javascript
复制
class DataUtil {
    @JvmStatic
    fun getDataJson(json: String): JSONObject? {
        return try {
            JSONObject(json)
        } catch (e: Exception) {
            null
        }
    }
}

测试是在从Log.e(...)返回null时验证调用了getDataJson()

代码语言:javascript
复制
@Test
fun test_() {

    io.mockk.mockkStatic(android.utils.Log::class)
    io.mockk.mockkStatic(DataUtil::class)
    every { DataUtil.getDataJson(any()) } returns null  //<== error points to this line

    LogUtil.logData("{key: value}")

    verify(exactly = 1) { android.utils.Log.e("+++", any()) }
    
}

得到误差

代码语言:javascript
复制
io.mockk.MockKException: Failed matching mocking signature for
left matchers: [any()]

如果更改为every { DataUtil.getDataJson("test string") } returns null,则会出现错误

代码语言:javascript
复制
MockKException: Missing mocked calls inside every { ... } block: make sure the object inside the block is a mock

如何将mockkStatic用于@JvmStatic连接?

EN

回答 1

Stack Overflow用户

发布于 2022-05-28 22:36:15

mockkStatic的使用是正确的,但DataUtil不是静态的。

如果您的代码是kotlin,则必须使用object代替类:

对象DataUtil { ..。}对象LogUtil { ..}

PD:在@After方法中使用unmockkStatic,以避免可能影响其他测试的副作用。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/71785361

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档