Android中的Mockito错误:java.lang.ClassNotFoundException:android.os.Parcelable

时间:2017-08-08 09:24:51

标签: android unit-testing mockito

界面如下:

interface ILoginView{
    fun userResponseProcessor(user: User?)
}

我在我的测试类中模拟了界面:

 @Mock
 private val mMockLoginView:  ILoginView? = null

运行此测试时,发生错误

    Underlying exception : java.lang.IllegalArgumentException: Could not create type

        at org.mockito.internal.runners.DefaultInternalRunner$1.withBefores(DefaultInternalRunner.java:38)
        at org.junit.runners.BlockJUnit4ClassRunner.methodBlock(BlockJUnit4ClassRunner.java:276)
  ...
    Caused by: java.lang.ClassNotFoundException: android.os.Parcelable
        at java.net.URLClassLoader.findClass(URLClassLoader.java:381)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
        at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:331)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
        ... 75 more

如何解决错误?

1 个答案:

答案 0 :(得分:2)

首先请使用正确版本的Mockito:

androidTestCompile ''org.mockito:mockito-android:2.8.47' 
testCompile 'org.mockito:mockito-android:2.8.47'

其次,Android项目有两种类型的测试:本地单元测试和仪器测试。请参阅official documentation for more details

本地单元测试在您的笔记本电脑或桌面上运行。因此,他们无权访问本地Android类,如Parcelable,如果对使用这些方法的类运行本地单元测试,则会出错。

在这个阶段,您有两个选择,您可以在真实设备或模拟器上运行测试作为检测测试,或者您可以使用像Robolectric这样的框架,它允许您使用所有本机运行本地单元测试像Parcelable

这样的课程