alo*_*loj 9 android unit-testing mockito kotlin
我正在尝试测试我的课程,我需要模拟一个static
课程.我的代码如下: -
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))
Run Code Online (Sandbox Code Playgroud)
但在第二行它会抛出一个错误:
"java.lang.IllegalStateException: any(Context::class.java) must not be null"
Run Code Online (Sandbox Code Playgroud)
我尝试过mockito-kotlin和befriending-kotlin-and-mockito没有退出.你知道怎么解决吗?
Tpo*_*6oH 13
当您调用时,Mockito经常返回null,any()
并且会破坏kotlin的非null参数.
在mockito-kotlin中,它们有一个单独的函数,称为anyOrNull().
你也可以创建自己的功能,在这里他们说这也应该有效.
/**
* Returns Mockito.any() as nullable type to avoid java.lang.IllegalStateException when
* null is returned.
*/
fun <T> any(): T = Mockito.any<T>()
Run Code Online (Sandbox Code Playgroud)
小智 5
在您的测试类中添加以下代码:
private fun <T> any(type : Class<T>): T {
Mockito.any(type)
return uninitialized()
}
private fun <T> uninitialized(): T = null as T
Run Code Online (Sandbox Code Playgroud)
Hem*_*mar -1
调用mock()时,不再需要传入类实例。如果类型可以推断,你可以这样写:
val mock : MyClass = mock()
Run Code Online (Sandbox Code Playgroud)
如果无法直接推断类型,请使用:
val mock = mock<MyClass>()
Run Code Online (Sandbox Code Playgroud)
希望它能帮助你!