I am trying to test my parcel implementation in some model class i have made, with mocked dependencies. However, every time i initialize it with said mocked dependencies, and then write, and read, it to a parcel, i get a Class not found when unmarshalling: Interval_Proxy
exception for my class Alarm, with mocked dependency Interval.
The problem is probably that in my parcel read implementation, i am using an Interval class loader when reading that particular dependency, even though the mock makes it into an Interval_Proxy type, but i really have no idea.
Can anyone shred some light on this?
My test:
UUID id = UUID.fromString("feb33f17-8512-4416-b376-84fd0bb603ef");
Date date = mock(Date.class);
Interval interval = mock(Interval.class);
Prescription prescription = mock(Prescription.class);
Alarm alarm = new Alarm(id, date, interval, prescription, false, false);
Parcel parcel = Parcel.obtain();
alarm.writeToParcel(parcel, 0);
parcel.setDataPosition(0);
Alarm parceledAlarm = Alarm.CREATOR.createFromParcel(parcel);
assertThat(alarm.getId(), is(id));
assertThat(alarm.getDate(), is(date));
assertThat(alarm.getInterval(), is(interval));
assertThat(alarm.getPrescription(), is(prescription));
assertThat(alarm.isDismissed(), is(false));
assertThat(alarm.isDismissed(), is(false));
assertThat(alarm, is(parceledAlarm));
My alarm parcel read and write:
protected Alarm(Parcel in) {
id = ((ParcelUuid) in.readParcelable(ParcelUuid.class.getClassLoader())).getUuid();
checked = in.readByte() != 0;
dismissed = in.readByte() != 0;
interval = in.readParcelable(Interval.class.getClassLoader());
prescription = in.readParcelable(Prescription.class.getClassLoader());
}
@Override
public void writeToParcel(Parcel dest, int flags) {
dest.writeParcelable(new ParcelUuid(id), flags);
dest.writeByte((byte) (checked ? 1 : 0));
dest.writeByte((byte) (dismissed ? 1 : 0));
dest.writeParcelable(interval, flags);
dest.writeParcelable(prescription, flags);
}
The exception thrown:
E/Parcel: Class not found when unmarshalling: Interval_Proxy
java.lang.ClassNotFoundException: Interval_Proxy
at java.lang.Class.classForName(Native Method)
at java.lang.Class.forName(Class.java:453)
at android.os.Parcel.readParcelableCreator(Parcel.java:2818)
at android.os.Parcel.readParcelable(Parcel.java:2772)
at com.rasive.pillreminder.models.Alarm.<init>(Alarm.java:46)
at com.rasive.pillreminder.models.Alarm$1.createFromParcel(Alarm.java:67)
at com.rasive.pillreminder.models.Alarm$1.createFromParcel(Alarm.java:64)
at com.rasive.pillreminder.AlarmTest_Parcelable.createParcel(AlarmTest_Parcelable.java:37)
at java.lang.reflect.Method.invoke(Native Method)
at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:50)
at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12)
at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:47)
at org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:17)
at org.junit.runners.ParentRunner.runLeaf(ParentRunner.java:325)
at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:78)
at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:57)
at org.junit.runners.ParentRunner$3.run(ParentRunner.java:290)
at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:71)
at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:288)
at org.junit.runners.ParentRunner.access$000(ParentRunner.java:58)
at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:268)
at org.junit.runners.ParentRunner.run(ParentRunner.java:363)
at org.junit.runners.Suite.runChild(Suite.java:128)
at org.junit.runners.Suite.runChild(Suite.java:27)
at org.junit.runners.ParentRunner$3.run(ParentRunner.java:290)
at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:71)
at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:288)
at org.junit.runners.ParentRunner.access$000(ParentRunner.java:58)
at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:268)
at org.junit.runners.ParentRunner.run(ParentRunner.java:363)
at org.junit.runner.JUnitCore.run(JUnitCore.java:137)
at org.junit.runner.JUnitCore.run(JUnitCore.java:115)
at android.support.test.internal.runner.TestExecutor.execute(TestExecutor.java:58)
at android.support.test.runner.AndroidJUnitRunner.onStart(AndroidJUnitRunner.java:375)
at android.app.Instrumentation$InstrumentationThread.run(Instrumentation.java:2074)
Caused by: java.lang.ClassNotFoundException: Didn't find class "Interval_Proxy" on path: DexPathList[[zip file "/system/framework/android.test.runner.jar", zip file "/data/app/com.rasive.pill_reminder.test-y_qRLspX6rV77YcK6XvlOQ==/base.apk", zip file "/data/app/com.rasive.pill_reminder-x2CBSuyy8_Rbcx9mOQPmSg==/base.apk"],nativeLibraryDirectories=[/data/app/com.rasive.pill_reminder.test-y_qRLspX6rV77YcK6XvlOQ==/lib/x86, /data/app/com.rasive.pill_reminder-x2CBSuyy8_Rbcx9mOQPmSg==/lib/x86, /system/lib, /vendor/lib]]
Aucun commentaire:
Enregistrer un commentaire