Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/unit-testing/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android单元测试中使用kotlin的Mock对象-any()给出null_Android_Unit Testing_Kotlin_Mockito - Fatal编程技术网

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”)