我正在尝试测试在 AsyncTask
中触发的监听器回调,
监听类:
interface LoaderListener {
fun onByteSuccess(..., ..., ...)
fun onByteFailure(..., ...)
}
包含 AsyncTask 的类:
class Loader {
override fun handleStreamTask(){
InputStreamHandlingTask(..., ...).execute(byteArray)
}
private inner class InputStreamHandlingTask constructor(
internal var ...,
internal var ...
) : AsyncTask<ByteArray, Void, ByteArray>() {
override fun doInBackground(vararg params: ByteArray): ByteArray? {
val response = params[0]
.....
return response
}
override fun onPostExecute(byteArray: ByteArray?) {
if (byteArray != null) {
listener.onByteSuccess(..., ..., ...)
} else {
listener.onByteFailure(..., ...)
}
}
}
}
我要进行的测试:
@Test
fun testIfListenerCalled(){
val loader: Loader = mock()
val loaderListener: LoaderListener = mock()
loader.handleStreamTask()
verify(loaderListener).onByteSuccess(..., ..., ...)
}
我目前遇到的错误:
Exception in thread ... java.lang.RuntimeException: Method execute in android.os.AsyncTask not mocked. See http://g.co/androidstudio/not-mocked for details. at android.os.AsyncTask.execute(AsyncTask.java)
最佳答案
如果这是在本地计算机上运行而不是在 Android 设备上运行的单元测试,则不能模拟依赖于 Android 框架的类,例如 AsyncTask
。相反,应该将其实现为插桩测试,而不是在 Android 设备上运行的单元测试,或者使用可以在本地计算机上模拟 Android 框架的框架。
更多信息在这里:https://developer.android.com/training/testing/unit-testing/instrumented-unit-tests
关于android - 在 AsyncTask 中测试一个涉及监听器回调的类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56823203/