Android单元测试中使用kotlin的Mock对象-any()给出null
我正在尝试测试我的类,我需要模拟一个Android单元测试中使用kotlin的Mock对象-any()给出null,android,unit-testing,kotlin,mockito,Android,Unit Testing,Kotlin,Mockito,我正在尝试测试我的类,我需要模拟一个静态类。我的代码如下: PowerMockito.mockStatic(ToolTipUtil::class.java) PowerMockito.`when`(ToolTipUtil.wasToolTipShown(any(Context::class.java), "")).thenReturn(true) val context = mock(Context::class.java) presenter.onResume(contex
静态类。我的代码如下:
PowerMockito.mockStatic(ToolTipUtil::class.java)
PowerMockito.`when`(ToolTipUtil.wasToolTipShown(any(Context::class.java), "")).thenReturn(true)
val context = mock(Context::class.java)
presenter.onResume(context)
verify(view).setMenuButtonShown(eq(false))
但在第二行,它抛出了一个错误:
"java.lang.IllegalStateException: any(Context::class.java) must not be null"
我试过了,没有出口。您知道如何修复它吗?调用mock()时,您不必再传入类实例。如果可以推断出类型,则只需编写:
val mock : MyClass = mock()
如果无法直接推断类型,请使用:
val mock = mock<MyClass>()
val mock=mock()
希望它能帮助你 Mockito在调用any()
时通常返回null,这破坏了kotlin的NOTNULL参数
在mockito kotlin中,它们有一个单独的函数,称为
你也可以创建自己的函数,他们说这也应该有效
/**
* Returns Mockito.any() as nullable type to avoid java.lang.IllegalStateException when
* null is returned.
*/
fun <T> any(): T = Mockito.any<T>()
/**
*返回Mockito.any()作为可空类型,以避免在
*返回null。
*/
fun any():T=Mockito.any()
在测试类中添加以下代码:
private fun <T> any(type : Class<T>): T {
Mockito.any(type)
return uninitialized()
}
private fun <T> uninitialized(): T = null as T
private fun any(类型:Class):T{
Mockito.any(类型)
返回未初始化()
}
private fun uninitialized():T=null作为T
不要使用静态类,但可以模拟实际的实例,或者更好的是伪造实例。问题是在执行任何操作(Context::class.java)时,它返回null。模仿一个物体是很好的。这就像一个符咒,但我不懂魔法。你能解释一下为什么这样做吗?有一个断开的链接:“他们说这应该行得通”。我无法编辑帖子,因为差异太小。可能需要在unitialized()
定义之前添加@Suppress(“UNCHECKED_CAST”)
。