运行单元测试时出现以下错误:
java.lang.RuntimeException:android.os.Handler中的方法removeCallbacks没有被模拟。有关详情,请参见http://g.co/androidstudio/not-mocked。
在android.os.Handler.removeCallbacks(Handler.java)
Mockito.doNothing()是否应阻止方法removeCallbacks的运行?
@Mock
private lateinit var handler: Handler
private lateinit var myClass: MyClass
init {
initMocks(this)
}
@Before
fun setUp() {
myClass = MyClass()
doNothing().`when`(handler).removeCallbacks(ArgumentMatchers.any(Runnable::class.java))
}
@Test
fun `When do something then `() {
assertThat(doSomething()).isTrue()
}
fun doSomething(): Boolean {
handler.removeCallbacks(runnable)
...
return result
}
被测试的类没有使用模拟的处理程序实例。被测试的类正在创建自己的处理程序,该处理程序是Android依赖项,考虑到您应该使用Robolectric测试运行程序或在构造函数中接收Handler来正确模拟实例。我的建议是使用Robolectric。
接收为参数:
@Mock
private lateinit var handler: Handler
private lateinit var myClass: MyClass
init {
initMocks(this)
}
@Before
fun setUp() {
doNothing().`when`(handler)
.removeCallbacks(ArgumentMatchers.any(Runnable::class.java))
myClass = MyClass(handler)
}
使用Robolectric,在这种情况下,您无需关心Handler:
@RunWith(AndroidJUnit4::class)
@Config(manifest = Config.NONE)
class MyClassTest {
private lateinit var myClass: MyClass
init {
initMocks(this)
}
@Before
fun setUp() {
myClass = MyClass()
}
}
您还必须将依赖项添加到build.gradle才能使用Robolectric:
testImplementation 'org.robolectric:robolectric:4.2.1'
testImplementation 'androidx.test.ext:junit:1.1.1'
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句