How do you unit test Parcelable? I created a Parcelable class, and wrote this unit test
TestClass test = new TestClass(); Bundle bundle = new Bundle(); bundle.putParcelable("test", test); TestClass testAfter = bundle.getParcelable("test"); assertEquals(testAfter.getStuff(), event1.getStuff());
I purposely try to fail the test by returning null in the createFromParcel()
, but it seems to succeed. It looks like it doesn't get parceled until it's needed. How do I force the Bundle to..bundle?
A Parcelable is the Android implementation of the Java Serializable. It assumes a certain structure and way of processing it. This way a Parcelable can be processed relatively fast, compared to the standard Java serialization.
Create Parcelable class without plugin in Android Studioimplements Parcelable in your class and then put cursor on "implements Parcelable" and hit Alt+Enter and select Add Parcelable implementation (see image). that's it.
I've found this link showing how you can unit test a parcelable object: http://stuffikeepforgettinghowtodo.blogspot.nl/2009/02/unit-test-your-custom-parcelable.html
You can actually skip the Bundle
if you don't really need to include it like zorch did his suggestion. You would then get something like this:
public void testTestClassParcelable(){ TestClass test = new TestClass(); // Obtain a Parcel object and write the parcelable object to it: Parcel parcel = Parcel.obtain(); test.writeToParcel(parcel, 0); // After you're done with writing, you need to reset the parcel for reading: parcel.setDataPosition(0); // Reconstruct object from parcel and asserts: TestClass createdFromParcel = TestClass.CREATOR.createFromParcel(parcel); assertEquals(test, createdFromParcel); }
You can do it by this way:
//Create parcelable object and put to Bundle Question q = new Question(questionId, surveyServerId, title, type, answers); Bundle b = new Bundle(); b.putParcelable("someTag", q); //Save bundle to parcel Parcel parcel = Parcel.obtain(); b.writeToParcel(parcel, 0); //Extract bundle from parcel parcel.setDataPosition(0); Bundle b2 = parcel.readBundle(); b2.setClassLoader(Question.class.getClassLoader()); Question q2 = b2.getParcelable("someTag"); //Check that objects are not same and test that objects are equal assertFalse("Bundle is the same", b2 == b); assertFalse("Question is the same", q2 == q); assertTrue("Questions aren't equal", q2.equals(q));
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With