gpt4 book ai didi

android - 如何使用 Mockito.mockStatic 在 kotlin android 中模拟静态方法

转载 作者:行者123 更新时间:2023-12-04 23:37:36 40 4
gpt4 key购买 nike

如何使用 Mockito.mockStatic 在 kotlin android 中模拟静态方法?
这是我的代码:

    class MyUtilClassTest {
@Test
fun testIsEnabled() {
Mockito.mockStatic(MyUtilClass::class.java, Mockito.CALLS_REAL_METHODS)
.use { mocked ->
mocked.`when`<Boolean> { MyUtilClass.isEnabled() }.thenReturn(true)
assertTrue(MyUtilClass.isEnabled())
}
}
}

object MyUtilClass {
fun isEnabled(): Boolean = false
}
我得到了这个异常(exception):

org.mockito.exceptions.misusing.MissingMethodInvocationException:when() requires an argument which has to be 'a method call on a mock'.For example:when(mock.getArticles()).thenReturn(articles);

Also, this error might show up because:

  1. you stub either of: final/private/equals()/hashCode() methods.Those methods cannot be stubbed/verified.Mocking methods declared on non-public parent classes is not supported.
  2. inside when() you don't call method on mock but on some other object.

最佳答案

如果你注释你的函数 isEnabled@JvmStatic ,你不会得到任何错误。如@Neige指出,Kotlin 中的静态函数在 bytecode 中实际上不是静态的默认。因此,我们需要用 @JvmStatic 标记我们的函数。为了生成额外的静态getter/setter方法。

object MyUtilClass {
@JvmStatic
fun isEnabled(): Boolean = false
}

关于android - 如何使用 Mockito.mockStatic 在 kotlin android 中模拟静态方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65237295/

40 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com