2017-08-08 85 views
1

界面如下:中的Mockito的Android错误:抛出java.lang.ClassNotFoundException:android.os.Parcelable

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 

如何解决错误?

+0

User类是Parcelable –

回答

2

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

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

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

本地单元测试可在您的笔记本电脑或台式机上的JVM上运行。因此,他们无法访问像Parcelable这样的原生Android类,如果您针对使用这些方法的类运行本地单元测试,则会出现错误。

在这个阶段,你有两个选择,你可以根据仪器测试一个真正的设备或模拟器上运行测试,也可以使用像Robolectric一个框架,它可以让你与所有的本地类,如Parcelable的运行本地单元测试