Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Android Unit Testing: Bundle/Parcelable

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?

like image 204
garbagecollector Avatar asked Oct 10 '12 22:10

garbagecollector


People also ask

What does Parcelable mean in Android?

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.

How do I make a Parcelable Android model?

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.


2 Answers

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); } 
like image 112
Xilconic Avatar answered Sep 28 '22 06:09

Xilconic


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)); 
like image 43
chivorotkiv Avatar answered Sep 28 '22 07:09

chivorotkiv